如何批量http请求gevent?

时间:2014-04-14 15:33:24

标签: python gevent

我从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?

1 个答案:

答案 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可能会有点短暂。