Ho un problema nel chiudere un'applicazione python mentre utilizzo ZeroMQ. prima mi collego a un server che non è in esecuzione!Terminazione dello script Python mentre si utilizza ZeroMQ con server morto
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)
e invio il mio messaggio
socket.send(msg)
in attesa di risposta
sockets = dict(poller.poll(1000))
if sockets.get(socket) == zmq.POLLIN:
result = socket.recv()
print (result)
modo che il server è morto il messaggio non verrà inviare e non v'è alcuna risposta. è vero lavoro. poi chiudo il socket e lo annullo dal poller, quindi mi collego al server vivo con un nuovo socket e invio il messaggio dal socket e ottengo una risposta da esso.
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
dopo di esso l'applicazione (script python) non è chiusa (termina)! è un mio problema [Posso chiudere l'applicazione con sig_term
ma non lo userò per qualche motivo.] se non invio il primo messaggio al server morto l'applicazione è chiusa veramente. Immagino che il problema sia ZeroMQ io thread ma non riesco a risolverlo.
exit(0) # Not worked
sys.exit(0) # Not worked
tnx, ha funzionato. – GHHT