首页 > 解决方案 > 在 previus 完成后,Celery Django 运行定期任务。[django 芹菜节拍]

问题描述

我想使用 django-celery-beat 库定期对我的数据库进行一些更改。我将任务设置为每 10 分钟运行一次。一切正常,直到我的任务花费不到 10 分钟,如果它持续更长时间,下一个任务开始,而第一个任务正在计算,它会导致错误。

我的任务是这样的:

from celery import shared_task
from .utils.database_blockchain import BlockchainVerify


@shared_task()
def run_function():
    build_block = BlockchainVerify()
    return "Database updated"

如果以前没有完成,有没有办法避免开始相同的任务?

标签: pythondjangocelery

解决方案


肯定有办法的。上锁了

celery 文档中有整页 -确保一次只执行一个任务

简要说明 - 您可以使用一些缓存甚至数据库来放置锁定,然后每次启动某些任务时只需检查该锁定是否仍在使用或已被释放。

请注意,任务可能会失败或运行时间超过预期。可以通过向锁添加一些过期时间来处理任务失败。并将锁定到期时间设置为足够长,以防任务仍在运行。

SO- link上已经有一个很好的线程。


推荐阅读