如何防止 Celery 在上一次执行完成之前执行周期性任务?
我有一个服务器集群,链接到一个公共(public)数据库服务器,执行 Celery 任务,我发现每个服务器可能偶尔同时运行相同的任务,以及不同的服务器同时运行相同的任务。这会导致大量竞态条件以极其微妙的方式破坏我的数据。
我一直在阅读 Celery's docs ,但我找不到任何明确允许这样做的选项。我找到了一个 similar question ,但建议的修复程序似乎是一个 hack,因为它依赖于 Django 的缓存框架,因此可能不会被集群中的所有服务器共享,从而允许多个服务器同时执行相同的任务。
Celery 中有没有选项可以记录数据库中当前正在运行的任务,并且在清除数据库记录之前不要再次运行?
我正在使用 Django-Celery 模块,尽管它提供了页面/admin/djcelery/taskstate/和/admin/djcelery/workerstate/,但我从未看到任何 long-正在运行的任务或 worker 出现在那里。
最佳答案
标准方式是通过django标准缓存机制使用共享锁。参见 this recipe来自官方文档
关于python - 如何确保 Celery 任务是防止重叠的 Celery 任务执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9915922/