python - 在 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"
如果以前没有完成,有没有办法避免开始相同的任务?
解决方案
肯定有办法的。上锁了
celery 文档中有整页 -确保一次只执行一个任务。
简要说明 - 您可以使用一些缓存甚至数据库来放置锁定,然后每次启动某些任务时只需检查该锁定是否仍在使用或已被释放。
请注意,任务可能会失败或运行时间超过预期。可以通过向锁添加一些过期时间来处理任务失败。并将锁定到期时间设置为足够长,以防任务仍在运行。
SO- link上已经有一个很好的线程。
推荐阅读
- apache-kafka - Kafka 生产者缓冲
- ios - 如何在两个地理位置之间创建 SCNPlane(如下图所示)?
- java - 如何使用并行或并发大大缩短单元测试的运行时间?
- c# - 如何将数据表的标题名称/列名称更改为 dataGridView
- java - PlatformException(FlutterSoundPlugin,未授予许可,android.permission.RECORD_AUDIO 或 android.permission.WRITE_EXTERNAL_STORAGE)
- scala - 使用两列以不同顺序对 Spark Dataframe 进行排序
- .net - .net core 2.0 如何为具有详细信息部分的两个相关实体创建表单
- python - Python:每小时迭代两个日期时间
- vue.js - Vuex 可以跨标签动态共享数据吗?
- android - 使用 Kotlin 处理改造回调