为什么greenlet的数量会影响响应的耗用时间

时间:2018-05-07 07:23:31

标签: python gevent monkeypatching greenlets

我使用Python协程库gevent和monkey补丁来增加http请求的并发性。但是我注意到响应的经过时间增加了,而并发性增加了。示例代码下方:

import gevent
from gevent import monkey
import requests

monkey.patch_all(thread=False)


def action():
    resp = requests.get("https://www.google.com")
    if resp.status_code == 200:
        print resp.elapsed.total_seconds()


jobs = []
for i in range(100):
    jobs.append(gevent.spawn(action))

gevent.joinall(jobs)

当产生10个greenlet时,经过的时间约为0.9秒,但当greenlets数增加到100时,经过的时间约为1.6~2.0秒。为什么会这样?

1 个答案:

答案 0 :(得分:1)

greenlets仍然是单线程的,这意味着它们一次只能做一件事。对于任何cpu密集的进程,这将导致延迟。是的,它是异步的,但它不是多处理的,所以如果某些东西使用1秒的CPU,你将任何后续greenlet的结果延迟1秒。

因此,随着队列的增长,即使只是ms,延迟也会变得明显。

相关问题