Python 3.x 使用zmq.Poller()为我的REQ/REP zmqclient添加超时,但函数不返回任何内容

Python 3.x 使用zmq.Poller()为我的REQ/REP zmqclient添加超时,但函数不返回任何内容,python-3.x,zeromq,distributed-computing,pyzmq,Python 3.x,Zeromq,Distributed Computing,Pyzmq,我想为我的0MQ客户端添加超时 我尝试了zmq.Poller()。这似乎在一开始就奏效了。但当我将代码移动到函数中时,我发现它不会返回任何东西。它只是卡在那里了 我有两行印刷品 第一次打印: 在该函数返回之前,我已成功打印结果zmq\u Response。但是,当涉及到下一行时,什么都不会返回 第二次打印: 我想这就是我上一次打印不起作用的原因 def send_message(): context=zmq.context() zmq_Socket=context.Socket(zmq.REQ)

我想为我的0MQ客户端添加超时

我尝试了
zmq.Poller()
。这似乎在一开始就奏效了。但当我将代码移动到函数中时,我发现它不会返回任何东西。它只是卡在那里了

我有两行印刷品

第一次打印:
在该函数返回之前,我已成功打印结果
zmq\u Response
。但是,当涉及到下一行时,什么都不会返回

第二次打印:
我想这就是我上一次打印不起作用的原因

def send_message():
context=zmq.context()
zmq_Socket=context.Socket(zmq.REQ)
zmq_插座。连接('tcp://localhost:5000')
zmq_数据={'Register':'default'}
zmq_Socket.send_字符串(json.dumps(zmq_数据),标志=0,编码='utf8')
poller=zmq.poller()
轮询器寄存器(zmq_套接字,标志=zmq.POLLIN)
如果poller.poll(超时=1000):
zmq_Response=zmq_Socket.recv_json()
其他:
#引发IOError(“处理身份验证请求超时”)
zmq_响应={'test':'test'}
轮询器。取消注册(zmq_插槽)
打印(zmq#u响应)#**此打印有效**
返回zmq_响应
res=发送消息()
打印(res)
预计它将打印
zmq\u响应
,但它不会打印。

我现在解决它

似乎当zmq_LINGER的值是默认值时,即-1,上下文将等待消息成功发送后才允许终止

所以我在超时分支时将zmq_LINGER设置为1。 它现在起作用了

def send_message():
context=zmq.context()
zmq_Socket=context.Socket(zmq.REQ)
zmq_插座。连接('tcp://localhost:5000')
zmq_数据={'Register':'default'}
zmq_Socket.send_字符串(json.dumps(zmq_数据),标志=0,编码='utf8')
poller=zmq.poller()
轮询器寄存器(zmq_套接字,标志=zmq.POLLIN)
如果poller.poll(超时=1000):
zmq_Response=zmq_Socket.recv_json()
其他:
# --------------------------------------------
#我在这里更改zmq.LINGER的值。
zmq_插座设置插座(zmq.LINGER,1)
# --------------------------------------------
zmq_响应={'test':'test'}
轮询器。取消注册(zmq_插槽)
打印(zmq_响应)
返回zmq_响应
res=发送消息()
打印(res)