ZeroMQ를 사용하는 동안 파이썬 응용 프로그램을 닫는 데 문제가 있습니다. 먼저 실행되지 않는 서버에 연결하십시오!죽은 서버가있는 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
그 후 응용 프로그램 (파이썬 스크립트)이 닫히지 않았습니다 (종료)! 내 문제 야. [sig_term
으로 응용 프로그램을 닫을 수 있지만 어떤 이유로 든 사용하지 않을 것입니다.] 죽은 서버에 첫 번째 메시지를 보내지 않으면 응용 프로그램이 정말로 닫힙니다. 나는 문제가 ZeroMQ io 스레드라고 생각하지만 해결할 수는 없다.
exit(0) # Not worked
sys.exit(0) # Not worked
tnx가 작동합니다. – GHHT