2010-11-15 6 views
5

मैं urllib2 के माध्यम से डेटा हथियाने के दौरान अपने एप्लिकेशन के टाइमआउट के हैंडलिंग का परीक्षण करना चाहता हूं, और मैं अनुरोध को समय-समय पर बल देने के लिए कुछ तरीका चाहता हूं।मैं urllib2 को समय-समय पर कैसे मजबूर कर सकता हूं?

बहुत धीमी इंटरनेट कनेक्शन खोजने का छोटा, मैं किस विधि का उपयोग कर सकता हूं?

मुझे इस तरह की चीजों को अनुकरण करने के लिए एक दिलचस्प एप्लिकेशन/सूट याद रखना प्रतीत होता है। शायद कोई लिंक जानता है?

+0

यहां एक [slow_http_server.py'] का कोड उदाहरण है (http://stackoverflow.com/a/32685765/4279) – jfs

उत्तर

10

मैं आमतौर पर netcat का उपयोग अपने स्थानीय मशीन के पोर्ट 80 पर सुनने के लिए समय समाप्ति तर्क का उपयोग कर सकते समाप्ति सेट करना चाहते हैं:

nc -l 80 

फिर मैं अपने आवेदन में अनुरोध यूआरएल के रूप में http://localhost/ का उपयोग करता हूं। नेटकैट http पोर्ट पर जवाब देगा लेकिन कभी भी प्रतिक्रिया नहीं देगा, इसलिए अनुरोध को समय-समय पर गारंटी दी जाती है बशर्ते आपने अपने urllib2.urlopen() कॉल में या socket.setdefaulttimeout() पर कॉल करके एक टाइमआउट निर्दिष्ट किया हो।

+0

में जोड़ा गया था बहुत अच्छा। उस बारे में कभी सोचा नहीं! –

+0

मुझे इसका उपयोग करना पड़ा: एनसी -एल-पी 80 हालांकि महान विचार! धन्यवाद। – mhost

+0

हाँ, नेटकैट के पुराने संस्करणों में थोड़ा अलग कमांड लाइन विकल्प, आईआईआरसी है। खुशी हुई यह काम किया! –

0

क्यों बैश में एक बहुत ही सरल सीजीआई स्क्रिप्ट नहीं लिखती है जो बस आवश्यक समय समाप्ति अवधि के लिए सोती है?

3
import socket 

socket.setdefaulttimeout(2) # set time out to 2 second. 

आप प्रत्येक अनुरोध के लिए आप के लिए urlopen

+0

ध्यान में रखना एक बात यह है कि urlopen के लिए टाइमआउट तर्क केवल पायथन 2.6 – mhost

6

आप के रूप में ऊपर दिखाए गए डिफ़ॉल्ट टाइमआउट सेट कर सकते हैं, लेकिन आप का मिश्रण इस्तेमाल कर सकते हैं दोनों अजगर 2.6 के बाद से वहाँ urlopen विधि में एक टाइमआउट विकल्प है में:

import urllib2 
import socket 

try: 
    response = urllib2.urlopen("http://google.com", None, 2.5) 
except URLError, e: 
    print "Oops, timed out?" 
except socket.timeout: 
    print "Timed out!" 

urllib2 के लिए डिफ़ॉल्ट टाइमआउट अनंत है , और सॉकेट आयात करने से आपको यह सुनिश्चित होता है कि आप टाइमआउट को सॉकेट के रूप में पकड़ लेंगे। टाइमआउट अपवाद

0

यदि आप मैक पर चल रहे हैं, तो speedlimit बहुत अच्छा है।

dummynet भी है। यह बहुत अधिक कट्टर है, लेकिन यह आपको कुछ और अधिक रोचक चीजें करने देता है। यहां एक pre-configured VM image है।

यदि आप पहले से ही एक लिनक्स बॉक्स पर चल रहे हैं, तो netem है।

मुझे विश्वास है कि मैंने ट्रैफिकशैपर नामक एक विंडोज-आधारित टूल के बारे में सुना है, लेकिन मैंने सत्यापित नहीं किया है।