Tôi gặp sự cố khi đóng ứng dụng python trong khi sử dụng ZeroMQ. đầu tiên tôi kết nối với một máy chủ không chạy!Chấm dứt tập lệnh python trong khi sử dụng ZeroMQ với máy chủ chết
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)
và gửi thông điệp của tôi
socket.send(msg)
chờ đợi trả lời
sockets = dict(poller.poll(1000))
if sockets.get(socket) == zmq.POLLIN:
result = socket.recv()
print (result)
nên máy chủ đã chết thông báo sẽ được gửi không và không có trả lời. nó hoạt động đúng. sau đó tôi đóng socket và unregister nó từ poller sau đó kết nối với máy chủ còn sống với ổ cắm mới và tôi gửi tin nhắn bằng ổ cắm và nhận được trả lời từ nó.
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
sau khi ứng dụng (tập lệnh python) không bị đóng (chấm dứt)! đó là vấn đề của tôi. [Tôi có thể đóng ứng dụng với sig_term
nhưng tôi sẽ không sử dụng nó vì một số lý do.] nếu tôi không gửi tin nhắn đầu tiên tới máy chủ chết, ứng dụng sẽ bị đóng thực sự. Tôi đoán vấn đề là ZeroMQ io thread nhưng tôi không thể giải quyết nó.
exit(0) # Not worked
sys.exit(0) # Not worked
tnx, nó hoạt động. – GHHT