有没有办法禁止两个不同的任务在 Celery 中同时运行?我正在考虑定义一个并发级别 = 1 的新队列,并将这些任务发送到该队列,但我找不到示例。那可能吗?
谢谢!
有没有办法禁止两个不同的任务在 Celery 中同时运行?我正在考虑定义一个并发级别 = 1 的新队列,并将这些任务发送到该队列,但我找不到示例。那可能吗?
谢谢!
是的,如果您不需要担心整体吞吐量,则可以创建一个单独的队列并让一个专用的工作人员将并发设置为 1。您可以创建任意数量的队列并配置每个工作人员接收哪些队列来自的消息。
启动worker时,您可以传递-Q
参数来设置它的队列,并传递参数来设置-c
它使用的线程数,如Workers Guide的队列和并发部分所述。
celery -A my_project worker -l info -Q queue1 -c 1
然后,您可以设置全局映射,使用Routing Guide定义每个任务进入哪些队列。
CELERY_ROUTES = {
'my_app.tasks.task1': {'queue': 'queue1'},
'my_app.tasks.task2': {'queue': 'queue2'},
}
或者,您可以根据Calling Tasks Guide在提交每个任务实例时指定队列。
task1.apply_async(queue='queue1')