嗨好StackOverflow的人。
我使用pyzmq并且我有一些长时间运行的进程,这导致发现套接字句柄处于打开状态。我已将违规代码缩小到以下内容:
import zmq
uri = 'tcp://127.0.0.1'
sock_type = zmq.REQ
linger = 250
# Observe output of lsof -p <pid> here and see no socket handles
ctx = zmq.Context.instance()
sock = ctx.socket(sock_type)
sock.setsockopt(zmq.LINGER, linger)
port = sock.bind_to_random_port(uri)
# Observe output of lsof -p <pid> here and see many socket handles
sock.close() # lsof -p <pid> still showing many socket handles
ctx.destroy() # Makes no difference
pyzmq版本是pyzmq-13.1.0
pyzmq中有错误,或者我做错了什么。我希望你能帮助我!!
谢谢!
答案 0 :(得分:5)
在#zeromq上与pieterh和minrk聊天后,我们找到了原因。
13.1.0中的 ctx.destroy()
有一个缩进错误,因此如果有一个未关闭的套接字,它只会调用Context.term()
。
解决方法:改为调用ctx.term()
,并确保在执行之前关闭所有套接字。