如何确保芹菜任务以串行方式运行?

时间:2012-08-22 06:58:37

标签: django rabbitmq celery django-celery

我有一个芹菜任务,它进行一个只能在系统范围内并行运行的子进程调用。虽然我找到了更好的解决方案,但我需要能够执行在单个worker上串行运行的任务。

我知道我可以创建一个表来跟踪当前正在运行任务的服务器,并在将来的任务运行之前等待它完成,但似乎必须有更好的方法。我已经非常了解芹菜文档,并简要介绍了rabbitmq文档,但无济于事。

有没有人想出一个优雅的解决方案来解决上述技术的一些隐藏功能?

1 个答案:

答案 0 :(得分:2)

如果您在django中设置database cache使用所有服务器通用的数据库,则可以实现此celery cookbook solution for executing one task at time。而不是使用变量lock_id,只需使用常量。

如果执行任务的工作人员无法使用锁定,请调用retry将任务放回队列。