celery - 在 Celery 任务中,数据库调度程序是否足够,或者我是否还需要指定 run_every 属性?
问题描述
我有一个应该每天运行一次的定期任务,但目前它每天运行两次,我不知道为什么。第二次运行发生在预期运行后几毫秒。
我的定期任务指定了run_every属性:
run_every = crontab(小时=1,分钟=1)
但在我的设置文件中,指定了数据库调度程序:
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
此外,在数据库中,还有包含任务名称及其 crontab 计划的表。例如,我们有一个名为 djcelery_crontabschedule 的表,它还指定同一任务应在凌晨 1:01 运行。
这会导致我的任务每天运行两次吗?
解决方案
我从不使用run_every
...这是我使用的 beatconfig.py 文件中的一个示例:
beat_schedule = {
'company-data-report': {
'task': 'report.company_data_report',
'schedule': crontab(minute=0, hour=7),
'args': [],
'options': {'expires': 120*60}
},
etc
此特定任务每天在指定时间运行。我们使用默认的 Celery 调度器,而不是一些第三方实现。
推荐阅读
- dataset - 如何使用 TF 2.0 从海量二进制数据中生成训练数据集?
- java - 如何判断一个类是否存在于项目中
- doxygen - 我可以生成将出现在 doxygen 报告中的常规文档吗?
- mysql - 为什么我会收到错误 1054:某些输入的字段列表中的未知列?
- php - 获取邮件正文的数据:phpmailer
- angular - Angular 7:使用异步管道过滤多个键的搜索结果
- azure-active-directory - 在 Microsoft OpenId Connect / Azure AD 中自定义登录页面
- python - Python Beautiful Soup 使用类解析表
- php - PHP 在 Visual Studio Code 中无法正常运行
- r - 使用 Caret 查找重要的特征