我从gevent文档中找到了这个例子,但我想控制gevents所做的并发请求:
import gevent
import urllib2
from gevent import monkey
monkey.patch_all()
urls = ['http://www.google.com', 'http://www.example.com', 'http://www.python.org']
def print_head(url):
print 'Starting %s' % url
data = urllib2.urlopen(url).read()
print '%s: %s bytes: %r' % (url, len(data), data[:50])
jobs = [gevent.spawn(print_head, url) for url in urls]
gevent.joinall(jobs, timeout=2)
如果我要求5000个网址请求,我如何将我的连接限制为50?
答案 0 :(得分:4)
您需要使用gevent.pool
。通常如下:
# 50 is your pool size
pool = gevent.pool.Pool(50)
for url in urls:
pool.spawn(print_head, url)
pool.join(timeout=2)
您直接在固定大小的池中生成,然后等待池执行请求。如果您有5000个请求,则超时2可能会有点短暂。