Я хотел бы использовать Celery в качестве очереди для своих задач, чтобы мое веб-приложение могло занять задание, вернуть ответ, и задача будет обработана в то же время /someday/... Я создаю своего рода API, поэтому я не знаю, какие задачи будут заблаговременно - в будущем могут быть задачи, связанные с HTTP-запросами, другим IO, но также и потребностями процессора. Что касается этого, я бы хотел запустить рабочих Celery в процессах, поскольку они являются универсальными типами parallelism в Python.
Однако, я хотел бы использовать gevent в своих задачах, поэтому у меня могла быть одна задача, порождающая множество HTTP-запросов и т.д. Проблема в том, когда я это делаю:
from gevent import monkey
monkey.patch_all()
Сельдерей перестает работать. Это начинается, но никакие задачи не могут быть эффективно выставлены в очередь - они, похоже, обращаются к брокеру, но работник сельдерей не собирает их и не обрабатывает. Только начинается и ждет. Если я удалю эти строки и выполню задачу без каких-либо gevent и распараллеливаний, все будет работать.
Я думаю, это может быть потому, что gevent исправления также нарезаются. Поэтому я попробовал
from gevent import monkey
monkey.patch_all(thread=False)
... но тогда сельдерей даже не запускается, он падает без объяснения причин (уровень отладки включен в журнал).
Можно ли использовать Celery для выполнения задач и gevent для выполнения некоторых действий внутри одной задачи? Как? Что я делаю неправильно?