我是django的初学者,我安装了芹菜。
如果同步或异步处理排队的工作,我对芹菜的工作感到困惑。当已经处理排队的工作时,其他工作是否可以排队?
答案 0 :(得分:2)
Celery是一个任务排队系统,由消息排队系统支持,Celery允许您以异步方式调用任务,不会阻止您完成任务的过程,您可以等待任务完成AsyncResult.get
。
在处理任务时,其他任务可以排队,如果Celery运行多个进程/线程(这是默认情况),任务将彼此并行执行。
您有责任确保以正确的顺序执行相关任务,例如如果任务A
的输出是其他任务B
的输入,那么您应该确保在开始任务A
之前从任务B
获得结果
从Celery文档中阅读Avoid launching synchronous subtasks。
答案 1 :(得分:1)
我认为你对芹菜的做法可能有点困惑。
Celery根本不负责排队。这由队列本身 - RabbitMQ,Redis或其他什么来处理。 Celery参与此过程的唯一方法是作为一个库,您可以在应用程序内部调用以将任务序列化为适合放入队列的任务。由于这是由您的Web应用程序完成的,它与您的应用程序本身完全同步或异步:通常,在生产中,您有多个进程运行您的站点,每个进程可以同时将事物放入队列,但每个排队行动在进行中完成。
Celery的要点是单独的工作流程。这是异步位的来源:工作者完全独立于Web应用程序运行,并根据需要从队列中选择任务。它们根本不参与将任务放入队列的过程。