我想从正在运行的内核中排队一些代码以便在主IPython线程上执行。换句话说,我想做这样的事情(这是伪代码 - 我找不到这样做的API)。
IPython.current_kernel.queue_execution("print 'FOO'")
我知道我可以使用IPython.kernel.connect.get_connection_file()
来获取当前内核的连接信息。然后我可以使用该连接文件构建一个客户端。但我理想情况下想要一种没有连接的方法。有没有办法做到这一点?
我正在使用IPython 2.4。
答案 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(猜想)。