如何启动 IPython 内核并使用 ZMQ 套接字进行连接?
Posted
技术标签:
【中文标题】如何启动 IPython 内核并使用 ZMQ 套接字进行连接?【英文标题】:How to start IPython kernel and connect using ZMQ sockets? 【发布时间】:2016-08-20 15:32:30 【问题描述】:我正在使用 C++ (Qt) 开发 IPython 的前端。
我设法将 Python 嵌入到我的应用程序中,并检索绘图并将其显示在我的 GUI 中。现在我想启动一个 IPython 内核并通过 ZMQ 套接字连接到它。
我找到了一个description 用于 IPython 内核的通信协议。但是,它并没有说明 anywhere 要连接到哪些端口。所以有一个通信协议很好,但如果我不知道要使用哪些端口,那就完全没用了。
文档提到“内核规范”并告诉我使用jupyter kernelspec list
命令。这确实向我展示了一个目录,其中仅包含两个文件:logo-32x32.png 和 logo-64x64.png ...
如何找到我需要连接的端口,以便与我的 IPython 内核进行通信?
我通过从我的 C++ Qt 应用程序运行以下 Python 代码来启动我的 IPython 内核:
import IPython
IPython.start_kernel(argv=[])
【问题讨论】:
看看我的ipy_repl.py
更新版本,来自SublimeREPL 插件,用于Sublime Text 编程编辑器。那里没有特定于 Sublime 的 API 东西。基本上,它适用于高达 4.1.1 的 IPython 和高达 4.1.0 的 jupyter_console(它似乎不适用于更高版本的 IPython 4 或 5 的任何版本)以在 Sublime 视图中设置连接并运行IPython/Jupyter 内核,包括利用其自动完成功能。
start_kernel
在当前进程中启动内核。听起来您想要的是一个单独的进程中的内核,您可以从应用程序进程连接到该内核。为此,您将使用 jupyter_client 模块。你可以看看像 Spyder 这样的应用程序,看看它们做了什么。
【参考方案1】:
事实证明,Thomas K 是对的。在不同进程中启动 IPython/Jupyter 内核的正确方法是:(以 python3 为例)
import jupyter_client
kernel_manager, kernel_client = jupyter_client.start_new_kernel(kernel_name='python3')
当我最初尝试这个时,我得到了一个权限错误。这已通过安装 python3 内核规范修复(显然 Jupyter 不会自动执行此操作...):
python3 -m ipykernel install --user
然后你可以通过
print(kernel_manager.get_connection_info())
应该可以使用这些端口通过 zero-mq 连接到内核。但是,kernel_client
公开了一些与内核通信的方法,因此使用该方法可能更容易......
【讨论】:
以上是关于如何启动 IPython 内核并使用 ZMQ 套接字进行连接?的主要内容,如果未能解决你的问题,请参考以下文章
ZeroMQ发布-订阅模式(套接字类型ZMQ_PUBZMQ_SUBZMQ_XPUB等)
如何解决“VisibleDeprecationWarning:zmq.eventloop.minitornado 已弃用”?