per questo codice:come abilitare la modalità async delle richieste?
import sys
import gevent
from gevent import monkey
monkey.patch_all()
import requests
import urllib2
def worker(url, use_urllib2=False):
if use_urllib2:
content = urllib2.urlopen(url).read().lower()
else:
content = requests.get(url, prefetch=True).content.lower()
title = content.split('<title>')[1].split('</title>')[0].strip()
urls = ['http://www.mail.ru']*5
def by_requests():
jobs = [gevent.spawn(worker, url) for url in urls]
gevent.joinall(jobs)
def by_urllib2():
jobs = [gevent.spawn(worker, url, True) for url in urls]
gevent.joinall(jobs)
if __name__=='__main__':
from timeit import Timer
t = Timer(stmt="by_requests()", setup="from __main__ import by_requests")
print 'by requests: %s seconds'%t.timeit(number=3)
t = Timer(stmt="by_urllib2()", setup="from __main__ import by_urllib2")
print 'by urllib2: %s seconds'%t.timeit(number=3)
sys.exit(0)
questo risultato:
by requests: 18.3397213892 seconds
by urllib2: 2.48605842363 seconds
in sniffer sembra questo:
Descrizione: primi 5 richieste sono sended dalla libreria richieste, prossimi 5 richieste sono inviato dalla libreria urllib2. rosso - è il momento in cui il lavoro è stato congelato, scuro - quando i dati ricevono ... wtf ?!
Come è possibile se la libreria di socket è corrotta e le librerie devono funzionare in modo identico? Come utilizzare le richieste senza request.async per lavoro asincrono?
puoi spiegare il problema un po 'più? Perché non vuoi usare il modulo requests.async? – Phani
Le richieste non funzionano in modo asincrono. Perché? Non voglio usare request.async perché contiene un'interfaccia cattiva da usare e non funziona anche asincronamente. Guarda l'immagine, è visibile la richiesta di lavoro e urllib2. – user1239798
Vedere http://stackoverflow.com/questions/9110593/asynchronous-requests-with-python-requests e https://github.com/kennethreitz/grequests. –