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



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

我有一个服务器集群,链接到一个通用的数据库服务器,执行Celery任务,我发现每个服务器偶尔会同时运行同一个任务,不同的服务器也会同时运行相同的任务。这导致了许多种族状况,这些状况以令人痛苦的微妙方式破坏了我的数据。

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

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

我使用的是Django Celery模块,尽管它提供了页面/admin/djcerine/taskstate/和/admin/dccerine/workerstate/,但我从未见过任何长时间运行的任务或工作人员出现在那里。

标准方法是通过django标准缓存机制使用共享锁。请参阅官方文档

中的此配方

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

相关内容

  • 没有找到相关文章