gpt4 book ai didi

python - 防止 Celery Beat 运行相同的任务

转载 作者:行者123 更新时间:2023-12-02 04:33:45 25 4
gpt4 key购买 nike

我有一个计划的 celery 每 30 秒运行一次任务。我有一个每天作为任务运行,另一个每周在用户指定的时间和一周中的某一天运行。它检查“开始时间”和“下一个预定日期”。在任务完成之前,下一个计划日期不会更新。

但是,我想知道如何确保 celerybeat 只运行任务一次。我现在看到,celery 将多次运行某个任务,直到该任务的下一个计划日期更新为止。

最佳答案

为了做到这一点,您需要实现某种“分布式锁”,解决此问题的简单可靠方法是使用带有 memcached 后端的 django 缓存,并在任务启动时在其中设置一个“标志”就在完成之前删除该标志。另一种选择是使用“redis”锁作为“分布式锁”。使用 django 缓存 memcached 作为后端的示例:

@shared_task
def my_task(arg1, arg2, lock_expire=300):
lock_key = 'my_task'
acquire_lock = lambda: cache.add(lock_key, '1', lock_expire)
release_lock = lambda: cache.delete(lock_key)

if acquire_lock():
try:
# Execute your code here!
except Exception:
# error handling here
finally:
# release allow other task to execute
release_lock()
else:
print("Other task is running, skipping")

上面的代码实现了一个“分布式锁”,以确保只有一个任务可以运行,无论您尝试再次执行它多少次。锁只能由一个任务获取:),另一个任务将跳过“主 block ”并完成。 这对你来说有意义吗?

玩得开心!

关于python - 防止 Celery Beat 运行相同的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31730964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com