如何确保Celery任务是防止Celery任务执行重叠

Cer*_*rin 12 python django celery django-celery

如何阻止Celery在上一次执行完成之前执行定期任务?

我有一个服务器集群,链接到一个公共数据库服务器,执行Celery任务,我发现每个服务器可能偶尔同时运行相同的任务以及同时运行同一任务的不同服务器.这导致了许多竞争条件,这些条件以痛苦的微妙方式破坏了我的数据.

我一直在阅读Celery的文档,但我找不到任何明确允许这个的选项.我发现了一个类似的问题,但建议的修复似乎是一个黑客,因为它依赖于Django的缓存框架,因此可能不会被集群中的所有服务器共享,允许多个服务器仍然同时执行相同的任务.

Celery中是否有任何选项可以记录数据库中当前正在运行的任务,并且在清除数据库记录之前不要再次运行?

我正在使用Django-Celery模块,即使它提供了pages/admin/djcelery/taskstate /和/ admin/djcelery/workerstate /,我也从未见过任何长期运行的任务或工作人员出现在那里.

Ben*_*enH 2

如果我是你,我会为任何不能同时执行的作业设置一个特殊的队列。然后您可以简单地为该队列启动一个单独的工作线程。