私はZeroMQを混乱させるばかりで、通常終了しないクライアントには問題があります。特に私はシンクサーバーがリッスンしていないときにデータを "プッシュ"する可能性のあるクライアントを持っていて、これはPythonコードの終了後にプロセスがハングアップするようです。私は、クリーンアップする必要があるいくつかのバックグラウンドスレッドがあると仮定します - どのように、またはドキュメントを指してください教えてください。ZeroMQプッシュソケットは、プロセスがリッスンしていないときにクライアントが終了しないようにします。
ここに関連するコードがあります。私は「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
をハングコメント解除。 私はcontext.term()とcontext.destroy()を試してみましたが、彼らは役に立たないようです。
ソケットをクリーンアップするにはどうすればよいですか?それとも他の手がかり?前もって感謝します!
self.push.setsockopt(zmq.LINGER、100)Thanks1 –