Python 为什么greenlet的数量会影响响应的运行时间

Python 为什么greenlet的数量会影响响应的运行时间,python,gevent,monkeypatching,greenlets,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.statu

我正在使用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只小绿鼠时,经过的时间约为0.9秒,但当小绿鼠数量增加到100只时,经过的时间约为1.6~2.0秒。为什么会这样

greenlet仍然是单线程的,这意味着它们一次只能做一件事。对于cpu密集型的任何进程,这都会导致延迟。是的,它是异步的,但不是多处理的,因此如果某个东西使用了1秒的CPU,那么您已经将任何后续greenlet的结果延迟了1秒


因此,随着队列的增长,即使只有毫秒,延迟也会变得明显

greenlet仍然是单线程的,这意味着它们一次只能做一件事。对于cpu密集型的任何进程,这都会导致延迟。是的,它是异步的,但不是多处理的,因此如果某个东西使用了1秒的CPU,那么您已经将任何后续greenlet的结果延迟了1秒


因此,随着队列的增长,即使只有毫秒,延迟也会变得明显

谁可能是拿着CPU的罪魁祸首?所有响应(即使是第一个响应)经过的时间都增加了。主程序中的for循环只需2毫秒即可完成。每行编程都需要处理。将100个元素添加到队列中,在它返回并再次检查第一个元素之前,所有操作都是问题的根源。打开套接字和访问web需要时间,一旦处于等待状态,就可以继续访问下一个对象。通过这种方式,它是异步的,但仍然是单线程的,它仅仅是幕后的上下文切换。谁可能是在这里占用CPU的罪魁祸首?所有响应(即使是第一个响应)经过的时间都增加了。主程序中的for循环只需2毫秒即可完成。每行编程都需要处理。将100个元素添加到队列中,在它返回并再次检查第一个元素之前,所有操作都是问题的根源。打开套接字和访问web需要时间,一旦处于等待状态,就可以继续访问下一个对象。通过这种方式,它是异步的,但仍然是单线程的,它只是幕后的上下文切换。