मूल पोस्ट पर अपडेट करें: एक सहयोगी ने बताया कि मैं क्या गलत कर रहा था। मैं पोस्ट के निचले हिस्से में स्पष्टीकरण दूंगा, क्योंकि यह दूसरों के लिए सहायक हो सकता है।पायथन में udp दर सीमा?
मैं अजगर कार्यक्रमों के नेटवर्क के प्रदर्शन पर सीमा की एक बुनियादी समझ पाने के लिए कोशिश कर रहा हूँ और एक विसंगति में चलाने की है। कोड खंड
while 1:
sock.sendto("a",target)
यूपीपी पैकेट को लक्ष्य मशीन पर भेजता है, जितना तेज़ मेजबान भेजता है। मैं प्रति सेकंड 4000 से अधिक पैकेट की प्रति भेजने की दर, या 250 यूएस प्रति पैकेट मापता हूं। यह पाइथन (प्रोग्राम 2 गीगाहर्ट्ज एएमडी ऑप्टरॉन, लिनक्स, पायथन संस्करण 2.6.6 पर चल रहा है) की व्याख्या की गई भाषा के लिए धीमा प्रतीत होता है। मैंने टीसीपी के लिए पायथन में बहुत बेहतर प्रदर्शन देखा है, इसलिए मुझे यह थोड़ा अजीब लगता है।
अगर मैं पृष्ठभूमि में इस चलाने के लिए और शीर्ष चलाने के लिए, मुझे लगता है कि अजगर CPU के सिर्फ 25% उपयोग कर रहा है, कि अजगर का सुझाव दे कृत्रिम रूप से यूडीपी पैकेट के संचरण में देरी हो सकती है।
क्या किसी और ने ऐसा कुछ अनुभव किया है? क्या किसी को पता है कि पाइथन पैकेट ट्रांसमिशन की दर को सीमित करता है, और यदि को बंद करने का कोई तरीका है?
बीटीडब्ल्यू, एक समान सी ++ प्रोग्राम 200,000 से अधिक पैकेट प्रति सेकंड, भेज सकता है, इसलिए यह प्लेटफ़ॉर्म या ओएस की आंतरिक सीमा नहीं है।
तो, यह पता चला कि मैंने मूर्खतापूर्ण नौसिखिया गलती की है। मैंने gethostbyname को स्पष्ट रूप से कॉल करने के लिए उपेक्षित किया। नतीजतन, sendto कमांड में लक्षित पता एक प्रतीकात्मक नाम था। यह हर बार एक पैकेट भेजा गया था जब एक नाम संकल्प ट्रिगर कर रहा था। इसे ठीक करने के बाद, मैं लगभग 120,000 पी/एस की अधिकतम प्रेषण दर मापता हूं। बहुत बेहतर।
अभी भी आश्चर्य की बात है, मैंने सोचा होगा कि नाम संकल्प कैश किया जाएगा। आपको आगे बढ़ना चाहिए और अपना संकल्प उत्तर के रूप में देना चाहिए। –