Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何批量http请求gevent?_Python_Gevent - Fatal编程技术网

Python 如何批量http请求gevent?

Python 如何批量http请求gevent?,python,gevent,Python,Gevent,我从gevent文档中找到了这个示例,但我想控制gevent执行的并发请求: 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' %

我从gevent文档中找到了这个示例,但我想控制gevent执行的并发请求:

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个URL,如何将连接限制为50个?

您需要使用
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的超时时间可能会有点短。

您需要使用
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的超时时间可能会有点短。

不定义超时是否安全?我真的不知道。可能不会。不定义超时安全吗?我真的不知道。可能不会。