use*_*258 7 ipython ipython-notebook
我想同时使用几个ipython笔记本共享相同的命名空间.目前有(ipython-1.1.0)这样做的方法吗?
我尝试在同一个ipython内核上创建不同的笔记本,但笔记本不共享命名空间.此外,我已经能够使用终端控制台和笔记本在同一名称空间上使用在IPython笔记本旁边使用IPython控制台的答案,但我找不到笔记本等效的--existing参数.
非常感谢
不幸的是,这不再有效,你得到错误消息ipython.kernel替换为ipython.parallel.
改变这种方式比上面更不优雅的方法是改变第273行的IPython/frontend/html/notebook/kernelmanager.py
kernel_id = self.kernel_for_notebook(notebook_id)
至
kernel_id = None
for notebook_id in self._notebook_mapping:
kernel_id = self._notebook_mapping[notebook_id]
break
Run Code Online (Sandbox Code Playgroud)
对于Anaconda python,将kernelmanager.py中的start_kernel替换为
def start_kernel(self, kernel_id=None, path=None, **kwargs):
global saved_kernel_id
if saved_kernel_id:
return saved_kernel_id
if kernel_id is None:
kwargs['extra_arguments'] = self.kernel_argv
if path is not None:
kwargs['cwd'] = self.cwd_for_path(path)
kernel_id = super(MappingKernelManager, self).start_kernel(**kwargs)
self.log.info("Kernel started: %s" % kernel_id)
self.log.debug("Kernel args: %r" % kwargs)
self.add_restart_callback(kernel_id,
lambda : self._handle_kernel_died(kernel_id),
'dead',
)
else:
self._check_kernel_id(kernel_id)
self.log.info("Using existing kernel: %s" % kernel_id)
saved_kernel_id = kernel_id
return kernel_id
Run Code Online (Sandbox Code Playgroud)
并添加
saved_kernel_id = None
Run Code Online (Sandbox Code Playgroud)
以上
class MappingKernelManager(MultiKernelManager):
Run Code Online (Sandbox Code Playgroud)
真正的IPython大师,请提供正确的修复程序.很多使用笔记本电脑的人要共享内核的能力,这是自然的,因为一台笔记本电脑迅速增长得太大了单一的复杂的应用程序工作,所以它更容易能够应用分解成多个笔记本.
另外,大师,当你正在聆听时,像Mathematica那样拥有折叠扩展功能会很不错,所以你只能查看你关心的笔记本部分,你可以缩小其余部分.
IPython Notebook 没有等效的--existing
. 笔记本电脑不共享内核。这不是笔记本本身的限制,它只是笔记本服务器代码中做出的设计决策。例如,可以修改服务器代码以使所有笔记本电脑共享相同的内核。您可以通过在 IPython 配置中进行一些猴子修补来完成此操作。首先创建一个配置文件:
$ ipython profile create singlekernel
[ProfileCreate] Generating default config file: u'~/.ipython/profile_singlekernel/ipython_config.py'
[ProfileCreate] Generating default config file: u'~/.ipython/profile_singlekernel/ipython_qtconsole_config.py'
[ProfileCreate] Generating default config file: u'~/.ipython/profile_singlekernel/ipython_notebook_config.py'
[ProfileCreate] Generating default config file: u'~/.ipython/profile_singlekernel/ipython_nbconvert_config.py'
Run Code Online (Sandbox Code Playgroud)
并编辑$(ipython locate profile singlekernel)/ipython_notebook_config.py
以包含:
# Configuration file for ipython-notebook.
c = get_config()
import os
import uuid
from IPython.kernel.multikernelmanager import MultiKernelManager
def start_kernel(self, **kwargs):
"""Minimal override of MKM.start_kernel that always returns the same kernel"""
kernel_id = kwargs.pop('kernel_id', str(uuid.uuid4()))
if self.km is None:
self.km = self.kernel_manager_factory(connection_file=os.path.join(
self.connection_dir, "kernel-%s.json" % kernel_id),
parent=self, autorestart=True, log=self.log
)
if not self.km.is_alive():
self.log.info("starting single kernel")
self.km.start_kernel(**kwargs)
else:
self.log.info("reusing existing kernel")
self._kernels[kernel_id] = self.km
return kernel_id
MultiKernelManager.km = None
MultiKernelManager.start_kernel = start_kernel
Run Code Online (Sandbox Code Playgroud)
这只是覆盖内核启动机制,仅启动一个内核并在每个后续请求时返回它,而不是为每个内核 ID 启动一个新内核。
现在,每当您启动笔记本服务器时
ipython notebook --profile singlekernel
Run Code Online (Sandbox Code Playgroud)
该会话中的所有笔记本都将共享相同的内核。
归档时间: |
|
查看次数: |
1819 次 |
最近记录: |