Подтвердить что ты не робот

Celerybeat автоматически отключает периодическую задачу

Я хотел бы создать периодическую задачу для сельдерея, используя интерфейс администратора django-celery. У меня есть задание, которое отлично работает при вызове вручную или через script. Это просто не работает через сельдерей. Согласно журналам отладки задача устанавливается на 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.

EDIT: Он работает со следующей настройкой. Я до сих пор не знаю, почему это не работает с джанго-сельдереем.

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

Ответ 1

У меня была такая же проблема. Убедитесь, что аргументы JSON отформатированы. Например, попробуйте установить позиционные аргументы на [1, false] - нижний регистр "false" - я просто протестировал его на экземпляре django-celery (версия 2.2.4), и он сработал.

Для ключевого слова args используйте что-то вроде { "name": "aldarund" }

Ответ 2

У меня тоже проблема.

С описанием моделей PeriodicTask в djcelery ( "JSON закодированные позиционные аргументы" ), как и ответы Эвана. Я пытаюсь использовать python json lib для кодирования перед сохранением.

И эта работа со мной

import json 
o = PeriodicTask()
o.kwargs = json.dumps({'myargs': 'hello'})
o.save()

версия для сельдерея 3.0.11