PYZMQ不返回

时间:2019-04-08 09:10:48

标签: python zeromq pyzmq

我有一个使用ZMQ REQ / REP套接字的程序来检查特定模块是否在主机上运行。

想要的行为是,如果我从模块中得到答案,我会做东西,如果不是(即,如果指定端口上没有ZMQ REQ套接字),那么我希望程序返回。

对于错误情况,我希望得到一个zmq.error.Again异常,我可以对此做出反应。

我的简化方法如下:

import zmq

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.setsockopt(zmq.RCVTIMEO, 1000)
socket.setsockopt(zmq.SNDTIMEO, 1000)

try:
    socket.connect ("tcp://localhost:5104")
    socket.send_string("hello")
    message = socket.recv(zmq.NOBLOCK) 

except Exception as e:
    print('Exception occured: ',e)

socket.close()

在IPython中,如果没有答案,代码将按预期工作,它将引发异常并返回。如果我从命令行调用此代码,但是它确实引发异常,请执行打印,但此后不返回-cmd窗口将在打印后停留,并且光标闪烁。 如果我注释掉socket.send_stringsocket.recv,通常也会在命令行中返回。

有什么想法为什么IPython和从命令行调用会给出不同的行为?

我的系统详细信息:

  

Windows 7

     

Anaconda 3

     

python 3.6.7

     

zeromq 4.2.5

[更新]

我找到了答案,为什么它不返回here。基本上,ZMQ试图关闭从未打开过的套接字。可以通过将LINGER选项设置为True来更改此行为:

socket.setsockopt(zmq.LINGER, True)

但是我仍然不明白为什么IPython返回...

0 个答案:

没有答案