Celery和FastAPI下载长文件的不同队列策略



我需要开发一个FastAPI,用户将向端点询问一些信息。这个端点会向Web服务器询问一些信息,其中包含用户介绍的参数,它会进行一些计算(我想一切都在6s内完成(,然后,它会下载一些大的压缩文件(800MB-1.5GB(,解压缩它们,处理一些信息,并将它们从磁盘中删除。

我的问题是,这些文件太大,无法快速处理,而且,我将受到服务器的限制,无法同时下载最多N个文件。此外,为了下载一些文件,由于服务器的限制,我需要等待几个小时才能下载。因此,我的想法是在6s之后返回一条消息,然后在另一个线程中处理下载。

您将遵循什么逻辑结构来部署此FastAPI?我曾考虑用芹菜创建两个队列,但我不确定要为下载部分分配多少工人。此外,一旦一个任务完成,是否可以调用另一个芹菜任务?(即使它在不同的队列中?(

根据官方的芹菜文档,您可以按照它来指定不同的队列。

from kombu import Queue
app.conf.task_default_queue = 'default'
app.conf.task_queues = (
Queue('default',    routing_key='task.#'),
Queue('feed_tasks', routing_key='feed.#'),
)
app.conf.task_default_exchange = 'tasks'
app.conf.task_default_exchange_type = 'topic'
app.conf.task_default_routing_key = 'task.default'

您可以通过将队列名称作为参数传递来执行芹菜命令:

celery -A app worker -l info -Q feed_tasks

最新更新