Короткий ответ
sync — один запрос на воркер, блокируется на любом I/O; gthread — несколько потоков на воркер; gevent — кооперативная многозадачность через monkey-patching блокирующих вызовов, позволяющая держать тысячи ожидающих соединений, но требующая совместимости всех используемых библиотек.
Как это работает подробнее
sync блокируется до завершения запроса; gthread позволяет другому потоку работать, пока один ждёт I/O (отпуская GIL); gevent патчит стандартную библиотеку так, что блокирующие вызовы становятся неблокирующими greenlet-переключениями.
Пример кода
Команды терминала
gunicorn app:app --workers 4 --worker-class sync
pip install gevent
gunicorn app:app --workers 4 --worker-class gevent --worker-connections 1000Что использовать на практике
- Рекомендация. переход на gevent/gthread выгоден, когда узкое место — ожидание сети; выигрыша не будет, если узкое место — CPU-bound вычисления (GIL всё равно не даёт параллельно исполнять Python-код), и возможны баги, если используются C-расширения, не совместимые с monkey-patching.
Подводные камни
- Риск. включить gevent без проверки совместимости зависимостей — получают труднодиагностируемые «подвисания»; считать, что gevent решит проблему CPU-bound нагрузки.