from functools import partial from operator import methodcaller from evergreen import futures, patcher # Monkey-patch. requests = patcher.import_patched('requests') __version__ = '0.0.1' __all__ = ['map', 'imap', 'get', 'options', 'head', 'post', 'put', 'patch', 'delete', 'request', '__version__'] # Export same items as vanilla requests __requests_imports__ = ['utils', 'session', 'Session', 'codes', 'RequestException', 'Timeout', 'URLRequired', 'TooManyRedirects', 'HTTPError', 'ConnectionError'] patcher.slurp_properties(requests, globals(), srckeys=__requests_imports__) __all__.extend(__requests_imports__) del requests, patcher, __requests_imports__ class AsyncRequest(object): """ Asynchronous request. Accept same parameters as ``Session.request`` and some additional: :param session: Session which will do the request, else one is created automatically. :param callback: Callback called on response. Same as passing ``hooks={'response': callback}``. """ def __init__(self, method, url, **kwargs): self.method = method self.url = url
from evergreen import futures, patcher urllib2 = patcher.import_patched('urllib2') urls = ["http://google.com", "http://yahoo.com", "http://bing.com"] def fetch(url): return urllib2.urlopen(url).read() executor = futures.TaskPoolExecutor(100) for body in executor.map(fetch, urls): print("got body {}".format(len(body)))