我刚刚开始搞乱 ZeroMQ,并且我遇到了客户端无法正常终止的问题。特别是,我有一个客户端,当没有接收器服务器正在侦听时,它可能会“推送”数据,这似乎会使进程在 python 代码完成后挂起。我假设有一些后台线程需要清理——请告诉我如何清理或指向文档。
这是相关的代码片段。如果我在没有侦听器的情况下运行进程,且“self.push”行未注释,则进程会挂起
def setup(self):
print self.name, "connect to sockets"
ctx = self.ctx = zmq.Context()
self.pull = ctx.socket(zmq.PULL)
self.pull.connect(self.ventillatorAddress)
self.push = ctx.socket(zmq.PUSH)
self.push.connect(self.sinkAddress)
self.control = ctx.socket(zmq.SUB)
self.control.connect(self.publisherAddress)
self.control.setsockopt(zmq.SUBSCRIBE, "") # get every control message
self.inbox = ctx.socket(zmq.SUB)
self.inbox.connect(self.distributorAddress)
self.inbox.setsockopt(zmq.SUBSCRIBE, self.name) # listen only for messages addressed with name
def start(self):
print self.name, "push worker is ready signal"
# listen for "go" signal
pollcount = 0
go = False
while not go:
#print "send ready for", self.name
#self.push.send(self.name+" ready")
print "listen for 'go'"
msg = self.recvPoll(self.control)
if msg is None:
pollcount += 1
assert pollcount<10
print "poll timeout", pollcount
time.sleep(1)
continue
pollcount = 0
print "recv'd", msg
assert msg=="go!"
go = True
print "go signal received"
pass
Run Code Online (Sandbox Code Playgroud)
当该行被注释(并且没有侦听器)时,该过程正常完成。我尝试了 context.term() 和 context.destroy() ,但它们似乎没有帮助。
如何清理插座?或者还有其他线索吗?提前致谢!
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |