芹菜、uvicorn 和 FastAPI

Celery, uvicorn and FastAPI

我有一个使用 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 绑定相关任务)。

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

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