The async.send method wasn't really doing anything useful. It was just calling the r.send() method of the Request object 'r'. It took an optional kwarg pools, and assigned it to r._pools which isn't used by anything. This situation was eaither broken or not fully implemented yet. I modified async.map to call r.send rather than send(r) and then modified async.send to actually make use of the pool that it is passed.

This commit is contained in:
Ben
2012-01-17 15:17:38 -06:00
parent df0dc2b67a
commit c658b363e3
+13 -16
View File
@@ -46,15 +46,16 @@ def patched(f):
return wrapped
def send(r, pools=None):
"""Sends a given Request object."""
def send(r, pool=None):
"""Sends the request object using the specified pool. If a pool isn't
specified this method blocks. Pools are useful because you can specify size
and can hence limit concurrency."""
if pools:
r._pools = pools
if pool != None:
print pool.full()
return pool.spawn(r.send)
r.send()
return r.response
return gevent.spawn(r.send)
# Patched requests.api functions.
@@ -80,17 +81,13 @@ def map(requests, prefetch=True, size=None):
if size:
pool = Pool(size)
pool.map(send, requests)
pool.join()
jobs = [pool.spawn(r.send) for r in requests]
else:
jobs = [gevent.spawn(send, r) for r in requests]
gevent.joinall(jobs)
jobs = [gevent.spawn(r.send) for r in requests]
gevent.joinall(jobs)
if prefetch:
[r.response.content for r in requests]
return [r.response for r in requests]
return [r.response for r in requests]