如何启动 IPython 内核并使用 ZMQ 套接字进行连接?

tcp*_*pie 6 c++ python qt ipython zeromq

我正在用 C++ (Qt) 开发 IPython 的前端。

我设法将 Python 嵌入到我的应用程序中并检索绘图并在我的 GUI 中显示它们。现在我想启动一个 IPython 内核并通过 ZMQ 套接字连接到它。

我找到了IPython 内核通信协议的描述。但是,它没有说明连接到哪些端口。因此,拥有一个通信协议是件好事,但如果我不知道要使用哪些端口,那就完全没用了。

该文档提到“内核规格”并告诉我使用该jupyter kernelspec list命令。这确实向我显示了一个目录,其中仅包含两个文件:logo-32x32.png 和 logo-64x64.png ...

如何找到需要连接的端口,以便与 IPython 内核进行通信?

我通过从 C++ Qt 应用程序运行以下 Python 代码来启动 IPython 内核:

import IPython
IPython.start_kernel(argv=[])
Run Code Online (Sandbox Code Playgroud)

tcp*_*pie 2

事实证明托马斯·K 是对的。在不同进程中启动 IPython/Jupyter 内核的正确方法是:(以 python3 为例)

import jupyter_client
kernel_manager, kernel_client = jupyter_client.start_new_kernel(kernel_name='python3')
Run Code Online (Sandbox Code Playgroud)

当我最初尝试这个时,我收到了权限错误。通过安装 python3 内核规范解决了这个问题(显然 Jupyter 不会自动执行此操作...):

python3 -m ipykernel install --user
Run Code Online (Sandbox Code Playgroud)

然后你可以通过以下方式获取端口

print(kernel_manager.get_connection_info())
Run Code Online (Sandbox Code Playgroud)

应该可以使用这些端口通过零MQ 连接到内核。但是,它kernel_client公开了一些与内核通信的方法,因此使用该方法可能更容易......