आप के बाद से सॉकेट ब्लॉक जब आप एक समय समाप्ति सेट, जोड़ता parallelize करने के साथ-साथ की जरूरत है। वैकल्पिक रूप से, आप एक टाइमआउट सेट नहीं कर सके, और चयन मॉड्यूल का उपयोग करें।
आप asyncore मॉड्यूल में प्रेषक वर्ग के साथ ऐसा कर सकते हैं। मूल http client example पर एक नज़र डालें। उस वर्ग के कई उदाहरण कनेक्ट पर एक-दूसरे को अवरुद्ध नहीं करेंगे। आप थ्रेड का आसानी से उपयोग कर सकते हैं, और मुझे लगता है कि सॉकेट टाइमआउट को ट्रैक करना आसान बनाता है, लेकिन चूंकि आप पहले ही एसिंक्रोनस विधियों का उपयोग कर रहे हैं, इसलिए आप उसी ट्रैक पर भी रह सकते हैं।
उदाहरण के लिए, अपने सभी Linux सिस्टम
import asyncore, socket
class client(asyncore.dispatcher):
def __init__(self, host):
self.host = host
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect((host, 22))
def handle_connect(self):
print 'Connected to', self.host
def handle_close(self):
self.close()
def handle_write(self):
self.send('')
def handle_read(self):
print ' ', self.recv(1024)
clients = []
for i in range(50, 100):
clients.append(client('cluster%d' % i))
asyncore.loop()
कहाँ cluster50 में पर निम्न काम करता है - cluster100, कई मशीनों है कि अनुत्तरदायी, या अस्तित्वहीन हैं देखते हैं। यह तुरंत प्रिंटिंग शुरू करता है:
Connected to cluster50
SSH-2.0-OpenSSH_4.3
Connected to cluster51
SSH-2.0-OpenSSH_4.3
Connected to cluster52
SSH-2.0-OpenSSH_4.3
Connected to cluster60
SSH-2.0-OpenSSH_4.3
Connected to cluster61
SSH-2.0-OpenSSH_4.3
...
हालांकि यह गेटड्रिन्फो को ध्यान में रखता है, जिसे अवरुद्ध करना है। यदि आपको डीएनएस प्रश्नों को हल करने में समस्याएं आ रही हैं, तो सब कुछ इंतजार करना होगा। आपको शायद अपने स्वयं के डीएनएस प्रश्नों को अलग से इकट्ठा करने की आवश्यकता है, और अपने एसिंक लूप
में आईपी पते का उपयोग करने की आवश्यकता है यदि आप एसिंककोर की तुलना में एक बड़ा टूलकिट चाहते हैं, तो Twisted Matrix पर एक नज़र डालें। इसमें प्रवेश करने के लिए थोड़ा भारी है, लेकिन यह पाइथन के लिए सबसे अच्छा नेटवर्क प्रोग्रामिंग टूलकिट है।
के साथ ब्लॉक नहीं करता है ठीक है, मुझे यहां माफी माँगनी है। मैंने पाइथन डॉक्स से कोड लिया, इसलिए यह मेरा कोड नहीं था, मैंने इसे स्वीकार किया कि यह सही है। और यह काम नहीं किया। यह अक्सर मेरे साथ हुआ कि लोगों ने मुझे सलाह दी, जिसे उन्होंने खुद को भी सत्यापित नहीं किया। मैं कभी अनुमान लगा सकता था कि कोड के बजाए मेरा ओएस समस्या होगी, इसलिए मैंने सोचा कि आप केवल एक और लड़के हैं जो hes को समझते हैं और मुझे यह जांचने के बिना दस्तावेज कोड चिपकाते हैं। इसके लिए फिर से क्षमा करें। मैकोज़ समस्या थी, यह पता लगाने के लिए मैंने 6 घंटे बर्बाद कर, आज 3 पूर्ण संस्करणों को फेंक दिया। – Tom
बीटीडब्ल्यू मैंने एक दोस्त के साथ अपने लिनक्स बॉक्स पर एक साथ फिर से परीक्षण किया, और यहां तक कि getAddrInfo को ब्लॉक करने के लिए प्रतीत नहीं होता है। हमें एक त्रुटि मिलती है: [Errno 115] ऑपरेशन अब प्रगति पर है। तो सैद्धांतिक रूप से गैर प्रतिक्रियाशील मेजबान के साथ asyncore भी linux में काम कर सकता है। – Tom
@ टॉम - एनपी, मैं मानता हूं कि यहां चारों ओर अनौपचारिक उत्तर हैं, खासकर गैर-खिड़कियों के खेतों में। इससे भी बदतर, क्या अनौपचारिक अंतहीन टीमों की टीम एक-दूसरे को वोट दे रही है, जिससे सही जवाब मिलना मुश्किल हो जाता है। – JimB