2014-09-24 73 views
1

我是django的初学者,我安装了芹菜。芹菜工作流程

如果排队的作品是同步处理或异步处理的,我对芹菜的工作感到困惑。当排队的作业正在处理中时,其他作品是否可以排队?

回答

2

Celery是一个任务排队系统,由消息队列系统支持,Celery允许您以不会阻塞任务完成的进程的方式异步调用任务,您可以等待任务完成使用AsyncResult.get

其他任务可以在任务正在处理时排队,如果Celery运行多个进程/线程(这是默认情况),任务将相互并行执行。

您有责任确保相关任务以正确的顺序执行,例如,如果任务A的输出是其他任务B的输入,那么在开始任务B之前,您应该确保从任务A获得结果。

从Celery文档中阅读Avoid launching synchronous subtasks

1

我想你可能会对芹菜做些什么感到困惑。

芹菜并不真正负责排队。这由队列本身来处理 - RabbitMQ,Redis或其他。 Celery在这方面涉及的唯一方式就像在应用程序中调用的库,以便将任务序列化为适合放入队列的任务。由于这是由您的Web应用程序完成的,因此它与您的应用程序本身完全同步或异步:通常,在生产中,您将有多个进程运行您的站点,这些进程中的每一个都可以同时将所有内容放入队列中,但每个队列行动在过程中完成。

芹菜的要点是单独的工人过程。这是异步位的来源:工作人员完全独立于您的Web应用程序运行,并根据需要从队列中选择任务。他们根本不参与将任务放到队列中的过程。