celerybeat автоматически отключает периодическое задание - PullRequest
11 голосов
/ 25 мая 2011

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

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

Ответы [ 2 ]

15 голосов
/ 21 июня 2011

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

7 голосов
/ 09 октября 2012

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

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

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

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

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

...