如何从Jupyter iopub套接字读取?

时间:2018-01-08 19:14:37

标签: zeromq jupyter

我正在尝试了解有关Jupyter线路协议的更多信息。我想收集在IOPub套接字上发送的消息的示例。

SETUP:

我在一个终端启动一个Jupyter控制台,然后找到连接文件。就我而言,内容如下:

{
    "shell_port": 62690,
    "iopub_port": 62691,
    "stdin_port": 62692,
    "control_port": 62693,
    "hb_port": 62694,
    "ip": "127.0.0.1",
    "key": "9c6bbbfb-6ad699d44a15189c4f3d3371",
    "transport": "tcp",
    "signature_scheme": "hmac-sha256",
    "kernel_name": ""
}

我创建了一个简单的python脚本,如下所示:

import zmq

iopub_port = "62691"
ip = "127.0.0.1"
transport = "tcp"

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect(f"{transport}://{ip}:{iopub_port}")

while True:
    string = socket.recv()
    print(string)

我打开第二个终端并执行如下脚本(它按预期阻止):

python3 script.py

然后我切换回第一个终端(运行Jupyter控制台)并开始执行代码。

问题:第二个终端上没有打印。

预期:一些Jupyter IO消息,或者至少是某种错误。

呃,求救?我的代码是否正常,这可能是我的配置问题?或者我的代码是否以某种方式进行了脑力激荡?

2 个答案:

答案 0 :(得分:0)

来自Jupyter客户回购的所有者之一:

  

ZMQ订阅者套接字在收到之前需要订阅集   任何消息。订阅是有效消息的前缀,而您   可以将其设置为空字节字符串以订阅所有消息。

e.g。在我的情况下,我需要添加

socket.setsockopt(zmq.SUBSCRIBE, b'')

在开始while循环之前。

答案 1 :(得分:-1)

您是否知道Jupyter Notebook中的过程是否完成可以从IOPub捕获?

我正在看这里(http://jupyterlab.github.io/jupyterlab/services/modules/kernelmessage.html),但不是很清楚。