有没有办法禁止两个不同的任务在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')