私はZeroMQを使用している間にpythonアプリケーションを終了する際に問題があります。 最初に実行していないサーバーに接続します。デッドサーバでZeroMQを使用中にpythonスクリプトが終了する
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket_id = randomID()
socket.setsockopt(zmq.IDENTITY, socket_id)
socket.connect("tcp://dead_server")
poller = zmq.Poller()
poller.register(socket, zmq.POLLIN)
と回答
sockets = dict(poller.poll(1000))
if sockets.get(socket) == zmq.POLLIN:
result = socket.recv()
print (result)
を待っ
socket.send(msg)
私のメッセージを送信するので、サーバーはメッセージを送信しないされ、返信がない死んでいます。それは本当の仕事です。私はソケットを閉じてポーラーから登録を解除し、新しいソケットを使って生きているサーバーに接続し、ソケットからメッセージを送り、そこから返信を受け取ります。
poller.unregister(socket)
socket.close()
socket = context.socket(zmq.REQ)
socket.setsockopt(zmq.IDENTITY, socket_id)
poller.register(socket, zmq.POLLIN)
socket.connect("tcp://alive_server")
socket.send(msg)
sockets = dict(poller.poll(1000))
if sockets.get(socket) == zmq.POLLIN:
result = socket.recv()
print (result)
# Every thing ok up to hear
その後、アプリケーション(pythonスクリプト)が閉じられない(終了する)!それは私の問題です。 [sig_term
でアプリケーションを閉じることができますが、何らかの理由でそれを使用しません] デッドサーバーに最初のメッセージを送信しないと、アプリケーションは本当に閉じます。私は問題がZeroMQ ioスレッドだと思うが、私はそれを解決することはできません。
exit(0) # Not worked
sys.exit(0) # Not worked
tnx、それは働きました。 – GHHT