Почему количество гринлетов повлияет на истекшее время ответов - PullRequest
0 голосов
/ 07 мая 2018

Я использую Python сопрограмму библиотеки gevent и monkey patch для увеличения параллелизма 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 секунды. Почему это случилось?

1 Ответ

0 голосов
/ 07 мая 2018

greenlets по-прежнему однопоточные, то есть они могут делать только одну вещь за один раз.Для любого процесса, интенсивно использующего процессор, это приведет к задержке.Да, он асинхронный, но не мультипроцессорный, поэтому, если что-то использует 1 секунду ЦП, вы откладываете результаты любого последующего гринлета на 1 секунду.

Таким образом, по мере роста вашей очереди задержка, даже если она составляет всего лишь мс, становится заметной.

...