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

标签 python django celery django-celery

如何防止 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/

相关文章:

python - XGBoost 使用 sklearn API 获取 predict_contrib?

python - 使用selenium和python通过CssSelector的 "begins with"方法定位元素

python - 不使用类名调用类变量

django - 向 django CBV 添加 header

python - Django 允许具有端口号的主机

python - 将 RGB 数组乘以颜色变换矩阵进行矢量化,用于图像处理

python - Django 类 View : __init__

适用于所有任务的 Python Celery 单个基类实例

django - Celery - 如何获取 shared_task 的任务 ID?

python - Django、Django Dynamic Sc​​raper、Djcelery 和 Scrapyd - 不在生产中发送任务