2017-01-17 9 views
0

В сельдерее 4> декоратор periodic_task устарел. Рекомендация теперь состоит в том, чтобы определить каждую периодическую задачу внутри, где вы инициализируете сельдерей (на основе того, что я могу найти, и docs).Добавление периодических заданий в сельдерей (django) внутри приложения

В моей установке django у меня много небольших приложений, и центральное место для установки периодов не будет выполнено.

Я все еще изучаю путь вокруг сельдерея, но я думаю, что мое решение «хорошо». Неправильно ли это решить, или есть ли другой способ теперь, когда periodic_task ушел?

from celery.schedules import crontab 
from lib.celery_instance import app # The celery instance 

@app.task() 
def mytask(): 
    # do something... 
    return 123 

app.add_periodic_task(crontab(hour=8, minute=45), mytask.s()) 
+0

Это выглядит нормально, но я считаю, что хранить его в центральном месте гораздо проще в обслуживании. – Fian

+0

Да, я вижу, что в большинстве случаев имеет смысл централизованно управлять ими. Но в этом случае приложений это просто не имеет смысла. Спасибо! – xeor

+0

@xeor Я пытаюсь обновить сельдерей 3.1 до 4 в моем проекте django, по какой-то причине его сбой при «auto_app_dicovery», есть ли что-то, что мы можем сделать, чтобы преодолеть это. Я знаю, что это не связано, просто интересно если вы могли бы помочь – kt14

ответ

0

Другим подходом к централизованному управлению периодическими задачами может быть определение dict в настройках.

CELERY_BEAT_SCHEDULE = { 
    'some name': { 
     'task': 'myapp.tasks.do_something', 
     'schedule': crontab(hour=0, minute=0), 
    } 
}