django - celerybeat 自动禁用周期性任务

标签 django celery django-celery celeryd

我想使用django-celery的管理界面为celery创建一个定期任务。我设置了一个任务,当手动或通过脚本调用时,该任务运行得很好。它只是无法通过 celerybeat 工作。根据调试日志,任务在第一次检索时设置为 enabled = False,我想知道为什么。

添加定期任务并传递 [1, False] 作为位置参数时,该任务会自动禁用,并且我看不到任何进一步的输出。当不带参数添加时,任务会被执行,但会立即引发异常,因为我没有提供所需的参数(有道理)。

有人看出这里出了什么问题吗?

提前致谢。

这是提供参数后的输出:

[DEBUG/Beat] SELECT "djcelery_periodictask"."id", [...] 
             FROM "djcelery_periodictask" 
             WHERE "djcelery_periodictask"."enabled" = true ; args=(True,)

[DEBUG/Beat] SELECT "djcelery_intervalschedule"."id", [...] 
             FROM "djcelery_intervalschedule" 
             WHERE "djcelery_intervalschedule"."id" = 3 ; args=(3,)

[DEBUG/Beat] SELECT (1) AS "a" 
             FROM "djcelery_periodictask" 
             WHERE "djcelery_periodictask"."id" = 3  LIMIT 1; args=(3,)

[DEBUG/Beat] UPDATE "djcelery_periodictask" 
             SET "name" = E'<taskname>', "task" = E'<task.module.path>', 
                 "interval_id" = 3, "crontab_id" = NULL, 
                 "args" = E'[1, False,]', "kwargs" = E'{}', "queue" = NULL, 
                 "exchange" = NULL, "routing_key" = NULL, 
                 "expires" = NULL, "enabled" = false, 
                 "last_run_at" = E'2011-05-25 00:45:23.242387', "total_run_count" = 9, 
                 "date_changed" = E'2011-05-25 09:28:06.201148' 
             WHERE "djcelery_periodictask"."id" = 3; 
             args=(
                   u'<periodic-task-name>', u'<task.module.path>', 
                   3, u'[1, False,]', u'{}', 
                   False, u'2011-05-25 00:45:23.242387', 9, 
                   u'2011-05-25 09:28:06.201148', 3
             )

[DEBUG/Beat] Current schedule:
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) {<crontab: 0 4 * (m/h/d)>}
[DEBUG/Beat] Celerybeat: Waking up in 5.00 seconds.

编辑: 它适用于以下设置。我仍然不知道为什么它不能与 django-celery 一起使用。

CELERYBEAT_SCHEDULE = {
    "example": {
        "task": "<task.module.path>",
        "schedule": crontab(),
        "args": (1, False)
    },
}

最佳答案

我也遇到了同样的问题。确保参数采用 JSON 格式。例如,尝试将位置参数设置为 [1, false]——小写“false”——我刚刚在 django-celery 实例(版本 2.2.4)上测试了它,它起作用了。

对于关键字参数,请使用类似 {"name": "aldarund"}

关于django - celerybeat 自动禁用周期性任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6121349/

相关文章:

python - 系统日期格式不使用 django 语言环境

python - 如何在 django 中的 python 脚本中接收表单输入?

django - Celery:许多小任务还是一个长时间运行的任务?

python - Django:导入错误:无法从 'Celery' 导入名称 'celery'

python - 如果其中一项任务失败,Celery 链就会中断

daemon - 使用 celeryd 作为多个 django 应用程序的守护进程?

html - Django 模板背景问题

python - Django 管理 "Preview PDF"按钮

python - celery 不应该以 root 身份运行的原因是什么?

django 1.11 与 celery 4.0 和 djcelery 兼容性问题