2015-05-06 5 views
10

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

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

Gunicorn gthread не имеет большой документации, но это похоже. От docs:

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

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

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

+0

Я никогда не пользовался официанткой, но, глядя на код Gunicorn, это простая обертка вокруг 'concurrent.futures'. https://docs.python.org/3/library/concurrent.futures.html –

ответ

1

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

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