【问题标题】:Celery Django runing periodic tasks after previus was done. [django-celery-beat]Celery Django 在之前完成后运行定期任务。 [django 芹菜节拍]
【发布时间】:2021-10-01 20:49:35
【问题描述】:

我想使用 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"

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

【问题讨论】:

标签: python django celery


【解决方案1】:

肯定有办法的。它正在锁定。

celery 文档中有一整页 - Ensuring a task is only executed one at a time.

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

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

已经有一个关于 SO - link 的好帖子。

【讨论】:

    猜你喜欢
    • 2011-05-31
    • 2015-05-11
    • 1970-01-01
    • 2012-07-30
    • 2014-10-28
    • 1970-01-01
    • 2016-12-28
    • 2018-04-05
    • 2012-05-09
    相关资源
    最近更新 更多