Подтвердить что ты не робот

Действительно ли Гуникорн похож на официантку?

Я прочитал несколько сообщений с 2013 года, что команда Gunicorn планировала построить модель рабочего слоя с буферизацией, подобную тому, как работает Waitress. Это то, что делает рабочий-асинхронный gthread? Работники gthread были выпущены с версией 19.0 в 2014 году.

У Waitress есть основной асинхронный поток, который буферизует запросы, и завершает каждый запрос одному из своих рабочих потоков синхронизации, когда запрос ввода-вывода завершен.

В Gunicorn gthread нет документации, но похоже. Из docs:

Рабочий gthread - это многопоточный рабочий. Он принимает соединения в основном цикле, принятые соединения добавляются в пул потоков в качестве задания соединения.

Я только спрашиваю, потому что я не очень хорошо разбираюсь в коде ввода-вывода python async, хотя беглое чтение gthread.py, похоже, указывает, что это процесс буферизации сокетов, который защищает рабочие потоки от длинного ввода-вывода (и буферизует также ввод/вывод ответа).

https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/gthread.py

4b9b3361

Ответ 1

Работник с резьбой в Gunicorn не выполняет буферизацию ввода-вывода и не считывает тело запроса в основном потоке.

Основной цикл асинхронно обрабатывает вызов accept() [1], но затем сокет немедленно отправляется в пул потоков [2].