2013-02-26 267 views
5

मैं एक बारवहाँ एक रास्ता एक ही बार में

कोड मैं इस समय सॉकेट नजर रखने के लिए उपयोग कर रहा हूँ में एकाधिक सॉकेट सुन सकते हैं कई अजगर सॉकेट को सुनने के लिए है है:

while True: 
    for sock in socks: 
     data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 
     print "received message:", data 

लेकिन यह है कि लाइन पर इंतजार कर रहा है:

data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 

जब तक यह एक संदेश प्राप्त नहीं करता है।

वहाँ यह एक बार

संपादित में एकाधिक सॉकेट को सुनने के बनाने के लिए एक रास्ता है: यकीन नहीं करता है, तो यह पूरी तरह से प्रासंगिक है, लेकिन मैं यूडीपी

उत्तर

9

हाँ उपयोग कर रहा हूँ, वहाँ है। आपको सॉकेट से प्राप्त करने के लिए गैर-अवरुद्ध कॉल का उपयोग करने की आवश्यकता है।

while True: 
    # this will block until at least one socket is ready 
    ready_socks,_,_ = select.select(socks, [], []) 
    for sock in ready_socks: 
     data, addr = sock.recvfrom(1024) # This is will not block 
     print "received message:", data 

नोट:: आप भी select.select() जो एक समय समाप्ति है के लिए एक अतिरिक्त तर्क पारित कर सकते हैं select module

की जाँच करें आप सॉकेट यहां से पढ़ रहे हैं आप इसे कैसे इस्तेमाल करते हैं। यदि कोई सॉकेट तैयार नहीं होता है तो यह हमेशा के लिए अवरुद्ध होने से रोक देगा।

+0

धन्यवाद जो पूरी तरह से काम करता है, [इस उदाहरण] (http://www.ibm.com/developerworks/linux/tutorials/l-pysocks/section4.html) भी वास्तव में उपयोगी था – Calum

+0

मदद की खुशी है :) – entropy