दिलचस्प पोस्ट
किसी फ़ाइल में कंसोल आउटपुट को मिरर करना आईई 8 में निहित तत्व को प्रभावित किए बिना डिव की पृष्ठभूमि की अपारदर्शिता? क्या कोई प्लेटफॉर्म्स हैं जहां संरचना की प्रति का उपयोग करें fd_set (चयन () के लिए) या pselect ()) समस्याओं का कारण बनता है? IEnumerable में कोई गणना विधि नहीं है java: आरएपीसी / एन्कोडेड wsdls JAXWS 2.0 में समर्थित नहीं हैं SLF4J: कक्षा "org.slf4j.impl.StaticLoggerBinder" लोड करने में विफल त्रुटि डिव के पहलू अनुपात बनाए रखें लेकिन सीएसएस में स्क्रीन चौड़ाई और ऊंचाई भरें? इकाई फ़्रेमवर्क के साथ कैस्केडिंग हटाना – ईएफ द्वारा हटाए गए संबंधित संस्थाएं जावास्क्रिप्ट: दो सरणियों को एक सरणी में जोड़ने के लिए कैसे जुड़ें / संयोजन करें? आईओएस 7 – स्थिति बार दृश्य को ओवरलैप करता है समय घटक के बिना NSDates की तुलना करना jQuery ओवरराइड डिफ़ॉल्ट सत्यापन त्रुटि संदेश प्रदर्शन (सीएसएस) पॉपअप / टूलटिप जैसे कीजिए क्या कोई ऑनलाइन रेगेक्स बड्डी जैसी नियमित अभिव्यक्ति विश्लेषक है? पायथन में स्थिर तरीके कर्ल स्थान त्रुटि का पालन करें

पायथन अनुरोधों के साथ अतुल्यकालिक अनुरोध

मैंने अजगर के लिए अनुरोध लायब्रेरी के दस्तावेज के भीतर दिए गए नमूने की कोशिश की:

http://docs.python-requests.org/en/latest/user/advanced/#asynchronous-requests

async.map(rs) मुझे प्रतिक्रिया कोड मिलता है लेकिन मुझे अनुरोध है कि प्रत्येक पृष्ठ की सामग्री प्राप्त करना है।

 out = async.map(rs) print out[0].content 

उदाहरण के लिए बस काम नहीं कर रहा है

वेब के समाधान से एकत्रित समाधान "पायथन अनुरोधों के साथ अतुल्यकालिक अनुरोध"

ध्यान दें

नीचे दिए गए उत्तर v0.13.0 + + अनुरोधों के लिए लागू नहीं है इस प्रश्न के लिखित होने के बाद अतुल्यकालिक कार्यक्षमता को ग्रीक के लिए स्थानांतरित कर दिया गया था। हालांकि, आप केवल नीचे दिए गए grequests साथ requests को प्रतिस्थापित कर सकते हैं और इसे कार्य करना चाहिए

मैंने इस उत्तर को छोड़ दिया है जैसा कि मूल प्रश्न को प्रतिबिंबित करना है जो अनुरोधों के बारे में <v0.13.0 था।


async.map एसिंक्रोनस के साथ कई कार्य करने के लिए आपको यह करना होगा:

  1. प्रत्येक वस्तु (आपके कार्य) के साथ आप क्या करना चाहते हैं, इसके लिए एक फ़ंक्शन निर्धारित करें
  2. आपके अनुरोध में एक ईवेंट हुक के रूप में उस फ़ंक्शन को जोड़ें
  3. सभी अनुरोधों / कार्यों की सूची पर async.map को कॉल करें

उदाहरण:

 from requests import async # If using requests > v0.13.0, use # from grequests import async urls = [ 'http://python-requests.org', 'http://httpbin.org', 'http://python-guide.org', 'http://kennethreitz.com' ] # A simple task to do to each response object def do_something(response): print response.url # A list to hold our things to do via async async_list = [] for u in urls: # The "hooks = {..." part is where you define what you want to do # # Note the lack of parentheses following do_something, this is # because the response will be used as the first argument automatically action_item = async.get(u, hooks = {'response' : do_something}) # Add the task to our list of things to do via async async_list.append(action_item) # Do our list of things to do via async async.map(async_list) 

async अब एक स्वतंत्र मॉड्यूल है: grequests

यहां देखें: https://github.com/kennethreitz/grequests

और वहाँ: पायथन पर एकाधिक HTTP अनुरोध भेजने के लिए आदर्श तरीका है?

स्थापना:

 $ pip install grequests 

उपयोग:

एक स्टैक बनाएं:

 import grequests urls = [ 'http://www.heroku.com', 'http://tablib.org', 'http://httpbin.org', 'http://python-requests.org', 'http://kennethreitz.com' ] rs = (grequests.get(u) for u in urls) 

स्टैक भेजें

 grequests.map(rs) 

परिणाम दिखता है

 [<Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>] 

समवर्ती अनुरोधों के लिए जरूरी सीमाएं निर्धारित नहीं होती हैं, यानी जब एक ही सर्वर पर कई अनुरोध भेजे जाते हैं

शायद अनुरोध-वायदा एक और विकल्प है

 from requests_futures.sessions import FuturesSession session = FuturesSession() # first request is started in background future_one = session.get('http://httpbin.org/get') # second requests is started immediately future_two = session.get('http://httpbin.org/get?foo=bar') # wait for the first request to complete, if it hasn't already response_one = future_one.result() print('response one status: {0}'.format(response_one.status_code)) print(response_one.content) # wait for the second request to complete, if it hasn't already response_two = future_two.result() print('response two status: {0}'.format(response_two.status_code)) print(response_two.content) 

कार्यालय दस्तावेज़ में यह भी सिफारिश की गई है अगर आप को शामिल नहीं करना चाहिए, तो यह अच्छा है

मैंने दोनों अनुरोध-वायदा और ग्रेचस का परीक्षण किया। Grequests तेज है लेकिन बंदर पैचिंग और निर्भरता के साथ अतिरिक्त समस्याएं लाता है। अनुरोध-वायदा कई बार ग्रेकेस से धीमी हैं मैंने अपनी खुद की और बस लिपटे अनुरोधों को थ्रेडपोल्क्स एक्सक्लोरर में लिखने का फैसला किया और यह लगभग उतना उपवास था जितना कि, लेकिन बाहरी निर्भरता के बिना।

 import requests import concurrent.futures def get_urls(): return ["url1","url2"] def load_url(url, timeout): return requests.get(url, timeout = timeout) with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor: future_to_url = {executor.submit(load_url, url, 10): url for url in get_urls()} for future in concurrent.futures.as_completed(future_to_url): url = future_to_url[future] try: data = future.result() except Exception as exc: resp_err = resp_err + 1 else: resp_ok = resp_ok + 1 

मुझे पता है कि यह थोड़ी देर के लिए बंद कर दिया गया है, लेकिन मैंने सोचा कि यह अनुरोध लाइब्रेरी पर निर्मित अन्य एंसक समाधान को बढ़ावा देने के लिए उपयोगी हो सकता है।

 list_of_requests = ['http://moop.com', 'http://doop.com', ...] from simple_requests import Requests for response in Requests().swarm(list_of_requests): print response.content 

डॉक्स यहां हैं: http://pythonhosted.org/simple-requests/

 threads=list() for requestURI in requests: t = Thread(target=self.openURL, args=(requestURI,)) t.start() threads.append(t) for thread in threads: thread.join() ... def openURL(self, requestURI): o = urllib2.urlopen(requestURI, timeout = 600) o... 

मैं कुछ समय के लिए github के gist एपीआई के खिलाफ async कॉल के लिए अजगर अनुरोधों का उपयोग कर रहा हूं।

उदाहरण के लिए, यहां कोड देखें:

https://github.com/davidthewatson/flasgist/blob/master/views.py#L60-72

अजगर की यह शैली स्पष्ट उदाहरण नहीं हो सकती, लेकिन मैं आपको आश्वासन दे सकता हूं कि कोड काम करता है। मुझे बताएं कि यह आपके लिए भ्रामक है और मैं इसे दस्तावेज दूंगा।

मैंने अजथन में अतुल्यकालिक विधियों का उपयोग करने के लिए कुछ चीजों की भी कोशिश की है, अतुल्यकालिक प्रोग्रामिंग के लिए मुड़ने का उपयोग करते हुए मैंने कभी भी बेहतर भाग्य प्राप्त किया है। इसमें कम समस्याएं हैं और अच्छी तरह से प्रलेखित है। यहाँ कुछ समानता का एक लिंक है जिसे आप मुड़ में मुड़कर कोशिश कर रहे हैं।

http://pythonquirks.blogspot.com/2011/04/twisted-asynchronous-http-request.html