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)
そして私のメッセージを送る
socket.send(msg)
返事を待っています
sockets = dict(poller.poll(1000))
if sockets.get(socket) == zmq.POLLIN:
result = socket.recv()
print (result)
サーバーが停止しているため、メッセージは送信されず、返信もありません。それは本当です。次に、ソケットを閉じてポーラーから登録解除し、新しいソケットで生きているサーバーに接続し、ソケットでメッセージを送信して応答を取得します。
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