अच्छी खबर यह है कि है, ZMQ 3.0 और बाद में (आधुनिक युग के रूप में), आप एक सॉकेट पर एक टाइमआउट सेट कर सकते हैं। तब
zmq_req_socket.setsockopt(zmq.RCVTIMEO, 500) # milliseconds
, जब आप वास्तव में (उत्तर प्राप्त करने के बाद आप के लिए एक संदेश भेजा है कोशिश: जैसा कि दूसरों कहीं उल्लेख किया है, आप के बाद आप सॉकेट बनाया है ऐसा करने चाहिए, लेकिन इससे पहले कि आप इसे कनेक्ट आरईपी सॉकेट), आप उस त्रुटि को पकड़ सकते हैं जो टाइमआउट पार हो जाने पर जोर दिया जाएगा:
try:
send(message, 0)
send_failed = False
except zmq.Again:
logging.warning("Image send failed.")
send_failed = True
हालांकि! जब ऐसा होता है, जैसा कि कहीं और देखा गया है, तो आपकी सॉकेट एक मजेदार स्थिति में होगी, क्योंकि यह अभी भी प्रतिक्रिया की उम्मीद कर रही है। इस बिंदु पर, मुझे कुछ भी नहीं मिल रहा है जो सॉकेट को पुनरारंभ करने के अलावा विश्वसनीय रूप से काम करता है।ध्यान दें कि यदि आप सॉकेट को डिस्कनेक्ट() करते हैं और फिर इसे फिर से कनेक्ट करते हैं, तो यह अभी भी इस खराब स्थिति में होगा। इस प्रकार आप आप भी देखेंगे कि क्योंकि मैं इसे बंद() सॉकेट d, प्राप्त टाइमआउट विकल्प "खो" था, इसलिए यह महत्वपूर्ण सेट है
def reset_my_socket:
zmq_req_socket.close()
zmq_req_socket = zmq_context.socket(zmq.REQ)
zmq_req_socket.setsockopt(zmq.RCVTIMEO, 500) # milliseconds
zmq_req_socket.connect(zmq_endpoint)
करने की जरूरत है कि नए सॉकेट पर।
मुझे उम्मीद है कि इससे मदद मिलती है। और मुझे उम्मीद है कि यह इस प्रश्न का सबसे अच्छा जवाब नहीं बनता है। :)
आप रूटर/डीलर आधारित विश्वसनीय अनुरोध प्रतिक्रिया में से एक (उर्फ समुद्री डाकू) पैटर्न में [गाइड] वर्णित करने के लिए स्विच करने के लिए चाहते हो सकता है (http://zguide.zeromq.org/page : सभी # अध्याय- विश्वसनीय-अनुरोध-उत्तर-पैटर्न) –