Mam problem z zamykaniem aplikacji Pythona podczas korzystania z ZeroMQ. Najpierw łączę się z serwerem, który nie działa!Zakończenie skryptu Pythona podczas korzystania z ZeroMQ ze zdalnym serwerem
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)
i wysyłanie moją wiadomość
socket.send(msg)
czekając na odpowiedź
sockets = dict(poller.poll(1000))
if sockets.get(socket) == zmq.POLLIN:
result = socket.recv()
print (result)
więc serwer jest martwy komunikat nie będzie wysyłać i nie ma odpowiedzi. to działa prawdą. następnie zamykam gniazdo i wyrejestrowuję go z pollera, a następnie łączę się z serwerem żywym z nowym gniazdem i wysyłam wiadomość przez gniazdo i otrzymuję od niej odpowiedź.
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
po tym aplikacja (skrypt python) nie jest zamknięta (zakończ)! to jest mój problem. [Mogę zamknąć aplikację pod numerem sig_term
, ale nie będę z niej korzystać z jakiegoś powodu.] Jeśli nie wyślę pierwszej wiadomości do martwego serwera, aplikacja zostanie naprawdę zamknięta. Domyślam się, że problemem jest wątek ZeroMQ io, ale nie mogę go rozwiązać.
exit(0) # Not worked
sys.exit(0) # Not worked
tnx, zadziałało. – GHHT