Python ZeroMQ推送套接字导致客户端在没有进程正在侦听时不终止

Python ZeroMQ推送套接字导致客户端在没有进程正在侦听时不终止,python,zeromq,Python,Zeromq,我刚开始搞砸ZeroMQ,我的客户端出现问题,无法正常终止。特别是,我有一个客户机,当没有接收器服务器在侦听时,它可能会“推送”数据,这似乎会使进程在python代码完成后挂起。我假设有一些后台线程需要清理——请告诉我如何清理或指向文档 下面是相关的代码。如果我在没有侦听器的情况下运行进程,并且未注释“self.push”行,则进程将挂起 def设置(自): 打印self.name,“连接到套接字” ctx=self.ctx=zmq.Context() 自拉力=ctx插座(zmq拉力) self

我刚开始搞砸ZeroMQ,我的客户端出现问题,无法正常终止。特别是,我有一个客户机,当没有接收器服务器在侦听时,它可能会“推送”数据,这似乎会使进程在python代码完成后挂起。我假设有一些后台线程需要清理——请告诉我如何清理或指向文档

下面是相关的代码。如果我在没有侦听器的情况下运行进程,并且未注释“self.push”行,则进程将挂起

def设置(自):
打印self.name,“连接到套接字”
ctx=self.ctx=zmq.Context()
自拉力=ctx插座(zmq拉力)
self.pull.connect(self.ventillatorAddress)
self.push=ctx.socket(zmq.push)
self.push.connect(self.sinkAddress)
自控=ctx.插座(zmq.SUB)
self.control.connect(self.publisherAddress)
self.control.setsockopt(zmq.SUBSCRIBE,“”)#获取每个控制消息
self.inbox=ctx.socket(zmq.SUB)
self.inbox.connect(self.distributorAddress)
self.inbox.setsockopt(zmq.SUBSCRIBE,self.name)#只听有name地址的邮件
def启动(自):
打印self.name,“推送工人准备就绪信号”
#收听“开始”信号
pollcount=0
go=错误
不去时:
#打印“发送准备就绪”,self.name
#self.push.send(self.name+“ready”)
打印“收听“开始”
msg=self.recvPoll(self.control)
如果msg为None:
pollcount+=1

assert pollcount这很可能是由于ZeroMQ的延迟功能造成的。引述:

ZMQ_LINGER选项应设置指定插座的逗留时间。延迟期确定在使用zmq_close(3)关闭套接字后,尚未发送给对等方的挂起消息在内存中的延迟时间,并进一步影响使用zmq_term(3)终止套接字的上下文

默认值会导致ZeroMQ无限期地等待,直到它能够传递卡住的消息

尝试将
ZMQ\u-LINGER
socket选项设置为零或短时间(毫秒)。

self.push.setsockopt(ZMQ.LINGER,100)1