从正在运行的内核中的主IPython线程上执行代码

时间:2015-03-17 19:26:31

标签: python ipython

我想从正在运行的内核中排队一些代码以便在主IPython线程上执行。换句话说,我想做这样的事情(这是伪代码 - 我找不到这样做的API)。

IPython.current_kernel.queue_execution("print 'FOO'")

我知道我可以使用IPython.kernel.connect.get_connection_file()来获取当前内核的连接信息。然后我可以使用该连接文件构建一个客户端。但我理想情况下想要一种没有连接的方法。有没有办法做到这一点?

我正在使用IPython 2.4。

1 个答案:

答案 0 :(得分:0)

我找到了适用于我的用例的解决方案。在我的用例中,内核是使用IPython.kernel.multikernelmanager.MultiKernelManager创建的(它运行内核的proc-of-proc)。这与在进程中运行的内核不同(例如,当您通过启动ipython.exe运行IPython控制台时)。

因此,对于我的out-of-proc内核案例,以下工作:

zmq.eventloop.ioloop.IOLoop.current().add_callback(my_callback)

我不知道为什么它完全不适用于进程内核的情况。也许是因为当你运行IPython控制台时,主线程一直在进行控制台I / O(猜想)。