From: asciimoo Date: Sun, 26 Feb 2012 03:04:33 +0000 (+0100) Subject: [enh] async.imap added -- generator object handling X-Git-Tag: v0.10.5~3^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=531dc351263f1630a72eb4960b13b8df1233457f;p=services%2Fpython-requests.git [enh] async.imap added -- generator object handling --- diff --git a/requests/async.py b/requests/async.py index 24f8a61..f2dad69 100644 --- a/requests/async.py +++ b/requests/async.py @@ -23,7 +23,7 @@ from . import api __all__ = ( - 'map', + 'map', 'imap', 'get', 'options', 'head', 'post', 'put', 'patch', 'delete', 'request' ) @@ -82,4 +82,25 @@ def map(requests, prefetch=True, size=None): jobs = [send(r, pool, prefetch=prefetch) for r in requests] gevent.joinall(jobs) - return [r.response for r in requests] \ No newline at end of file + return [r.response for r in requests] + + +def imap(requests, prefetch=True, size=2): + """Concurrently converts a generator object of Requests to + a generator of Responses. + + :param requests: a generator of Request objects. + :param prefetch: If False, the content will not be downloaded immediately. + :param size: Specifies the number of requests to make at a time. default is 2 + """ + + pool = Pool(size) + + def send(r): + r.send(prefetch) + return r.response + + for r in pool.imap_unordered(send, requests): + yield r + + pool.join() \ No newline at end of file