如何在Celery中使两个任务互斥



有没有办法禁止两个不同的任务在Celery中同时运行?我正在考虑定义一个并发级别为1的新队列,并将这些任务发送到该队列,但我找不到示例。这可能吗?

谢谢!

是的,如果您不需要担心整体吞吐量,那么可以创建一个单独的队列,并将并发性设置为1的专用工作线程。您可以创建任意数量的队列,并配置每个工作人员接收消息的队列。

启动worker时,可以传递-Q参数来设置其队列,传递-c参数来设置它使用的线程数,如Workers Guide的queues and Concurrency部分所述。

celery -A my_project worker -l info -Q queue1 -c 1

然后,您可以使用"路由指南"设置全局映射,定义每个任务要转到的队列。

CELERY_ROUTES = { 'my_app.tasks.task1': {'queue': 'queue1'}, 'my_app.tasks.task2': {'queue': 'queue2'}, }

或者,您可以在提交每个任务实例时根据《调用任务指南》指定队列。

task1.apply_async(queue='queue1')

相关内容

  • 没有找到相关文章

最新更新