У меня есть API-код FastAPI, который выполняется с помощью uvicorn. Теперь я хочу добавить систему очередей, и я думаю, что Celery и Flower могут быть для меня отличными инструментами, поскольку у моего API есть несколько конечных точек, которые используют много ресурсов ЦП и требуют несколько секунд для ответа. Однако у меня есть пара вопросов по поводу добавления сельдерея:
Это то, о чем я думал. Так что АСГИ все равно нужен. Я говорю это, потому что я вижу, как люди запускают Celery -A celery_tasks worker Но я не вижу, чтобы они затем запускали fastapi, например, из uvicorn...
Это будет зависеть от макета проекта; обычно вы не запускаете сами celery workers из FastAPI или uvicorn, а только передаете задачи, которые должны быть выполнены. Если у вас есть ресурс, за которым вы следите, будет проще комментировать то, что вы прочитали.
Does Celery substitute Uvicorn?
Нет. Celery не является заменой Uvicorn. Uvicorn предназначен для запуска вашего приложения FastAPI, Celery не сделает этого за вас.
I have read a lot about using Celery for creating a queu for FastAPI. However, you can manage a queue in FastAPI without using Celery. What's better? and why?
Я предполагаю, что вы имеете в виду ФонЗадачи здесь, но это не замена Celery. Фоновые задачи FastAPI предназначены для выполнения простых задач (а не задач, связанных с процессором).
Отвечая на вопрос, в идеале нужно запустить оба сервиса: Uvicorn и Celery. Вы можете увидеть пример того, как это сделать здесь.
Не то чтобы это имело здесь большое значение, но я один из сопровождающих Uvicorn.
1. uvicorn — это веб-сервер, совместимый с ASGI. Celery — это очередь задач. Они делают ортогональные разные вещи. 2. Celery находится вне процесса, позволяя FastAPI обрабатывать то, что имеет отношение к самому веб-запросу, и передавая длительный процесс соответствующей системе очередей. Необходима ли сложность или «лучше», зависит от вашей проблемы.