7

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
4

1 に答える 1