From 531dc351263f1630a72eb4960b13b8df1233457f Mon Sep 17 00:00:00 2001 From: asciimoo Date: Sun, 26 Feb 2012 04:04:33 +0100 Subject: [PATCH] [enh] async.imap added -- generator object handling --- requests/async.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) 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 -- 2.7.4