python - celery 、uvicorn 和 FastAPI

标签 python api celery fastapi uvicorn

我有一个使用 uvicorn 执行的 FastAPI api 代码。现在我想添加一个队列系统,我认为 Celery 和 Flower 对我来说是很好的工具,因为我的 api 有一些端点使用大量 CPU 并且需要几秒钟的时间来回答。但是,我对添加 Celery 有几个问题:

  1. Celery 会替代 Uvicorn 吗?我还需要它吗?我在网站上看不到他们也考虑 uvicorn 的任何例子,当你执行 Celery 时似乎不需要它......
  2. 我阅读了很多有关使用 Celery 为 FastAPI 创建队列的文章。但是,您可以在不使用 Celery 的情况下在 FastAPI 中管理队列。什么更好?为什么?

最佳答案

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?

我猜你的意思是 BackgroundTasks在这里,但这不是 celery 的替代品。 FastAPI BackgroundTasks 旨在执行简单任务(而不是 CPU 绑定(bind)相关任务)。

回答这个问题,理想情况下,您必须同时启动两个服务:Uvicorn 和 Celery。您可以查看有关如何操作的示例 here .

这在这里并不重要,但我是 Uvicorn 的维护者之一。

关于python - celery 、uvicorn 和 FastAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72134530/

相关文章:

python - 如何 native 增加字典元素的值?

php - facebook api 将#_=_ 附加到我的返回 uri

python - 使用Flower时如何查看经纪商信息?

python - OpenCV Haar 特征检测,仅限于 Camshift 跟踪区域

python - 为什么我不想在安装时将 Python.exe 添加到我的系统路径?

.htaccess - Lumen 从请求中获取 header key

RabbitMQ 在第一个消息之后丢弃消息

rabbitmq - 如何从连接自己的 channel 以外的其他 channel 恢复未确认的 AMQP 消息?

python - 在 Python 脚本中比较 SNMP OID

javascript - 如何使用 javascript 使用 Twitter API