Параллельное выполнение с gevent
Введение
На главной странице gevent описывается как сетевая библиотека для Python, основанная на корутинах и использующая greenlet для предоставления высокоуровневого синхронного API поверх цикла событий libev или libuv.
Возможности:
Лёгкие единицы выполнения на основе greenlet.
API, повторно использующий концепции стандартной библиотеки Python (например, события и очереди).
Кооперативные DNS-запросы, выполняемые с помощью пула потоков, dnspython или c-ares.
Утилита monkey patching, позволяющая сторонним модулям работать в кооперативном режиме
TCP/UDP/HTTP-серверы
Поддержка подпроцессов (через gevent.subprocess)
Пулы потоков
gevent создан под влиянием eventlet, но отличается более последовательным API, простой реализацией и более высокой производительностью. Узнайте, почему другие используют gevent, и ознакомьтесь со списком проектов с открытым исходным кодом на основе gevent.
Включение gevent
Вы можете включить пул gevent, используя параметр рабочего процесса celery worker -P gevent или celery worker --pool=gevent.
$ celery-Aprojworker-Pgevent-c1000
Примеры
Примеры использования поддержки Eventlet см. в каталоге примеров gevent в дистрибутиве Celery.
Известные проблемы
Известна проблема при использовании Python 3.11 и gevent. Она описана здесь и рассматривается в обсуждении gevent. Обновление до greenlet 3.0 решает эту проблему.
Copyright © 2017-2026 Asif Saif Uddin, core team & contributors. All rights reserved.
Celery is licensed under The BSD License (3 Clause, also known as the new BSD license). The license is an OSI approved Open Source license and is GPL-compatible.
https://docs.celeryq.dev/en/stable/userguide/concurrency/gevent.html