克隆活动的ipython内核?

克隆活动的ipython内核?,python,ipython,Python,Ipython,假设您打开了一个ipythonqt shell,并且该shell正在运行一个脚本。有没有办法实时克隆shell(即打开另一个ipython shell,使其包含当前与第一个shell/内核的内存状态关联的所有对象的副本)?这样做的目的(除其他外)是允许检查原始shell在运行其脚本时的进度。谢谢。克隆正在运行的进程的标准机制称为分叉。但是,按照你描述的方式,以互动的方式走下去,可能会是一条痛苦的道路 在我看来,实现起来非常简单的是在python脚本中创建一个新线程(使用线程标准包),该线程包含对

假设您打开了一个ipythonqt shell,并且该shell正在运行一个脚本。有没有办法实时克隆shell(即打开另一个ipython shell,使其包含当前与第一个shell/内核的内存状态关联的所有对象的副本)?这样做的目的(除其他外)是允许检查原始shell在运行其脚本时的进度。谢谢。

克隆正在运行的进程的标准机制称为分叉。但是,按照你描述的方式,以互动的方式走下去,可能会是一条痛苦的道路

在我看来,实现起来非常简单的是在python脚本中创建一个新线程(使用
线程
标准包),该线程包含对交互式shell的调用(按照
import code;code.interact(local=locals())
import pdb;pdb.set_trace()
)。但是,您必须知道,当您的交互式shell正在积极工作时,您的主线程将不会运行,因为

不过,您最好实施某种基于时间的监控,而不是这种解决方案。大致如下:

if loop_number % 1000 == 0:
    print(x)

导入时间
时间戳=0
[...]
如果时间戳+5
IPython是围绕一个具有多个控制台的解释器内核设计的。当我开始

ipython console
它在横幅文本中报告:

[IPKernelApp] To connect another client to this kernel, use:
[IPKernelApp] --existing kernel-6795.json
因此,在另一个shell中,我运行
ipython控制台——现有的kernel-6795.json
,然后可以输入一个shell

pid = os.getpid()
在另一个外壳中:

print pid
而不会出现名称错误。由于我以前从未使用过此功能,因此我确实了解了它是如何作为进程实现的:有两个
ipython
实例,但只有一个
python
。实际上,
os.getpid()
在两个shell中给出了相同的PID


但是:如果一个shell正在运行代码,则第二个shell将阻塞,直到第一个shell返回命令提示符。我不知道更多事件驱动的
ipythonqtconsole
是如何处理这个问题的

fork()不工作吗?如果我不清楚,很抱歉-脚本将正在运行,阻止在shell中执行任何命令。我认为在这个场景中,只有shell菜单选项可用(即各种魔术)。谢谢,msw-有趣的东西。然而,正如您所指出的,一个shell被阻塞直到另一个shell完成执行,这是这里的主要障碍。。。
print pid