2015-03-03 2 views
7

Я несколько раз читал несколько страниц результатов Google, и я очень смущен тем, как макет моего проекта. Мне удалось заставить Celerybeat работать с помощью декоратора period_task, но это depreciated and is being removed. Из того, что я понимаю, the docs предположить, что CELERYBEAT_SCHEDULE является заменой. Я создал файл точно так, как показано, но еще не понял:Где находится CELERYBEAT_SCHEDULE в вашем проекте?

  • Как его назвать?
  • Куда поместить?

Я считаю, что это очень трудно найти правильный способ использовать сельдерей в проекта без Джанго.

ответ

7

Это немного запутанно, что the docs делает его похожим на ваш CELERYBEAT_SCHEDULE - это отдельный файл. На самом деле это запись в вашем приложении (ака: Celery()), как вы можете see it listed here. Поэтому, однако, вы получаете конфигурацию в своем приложении, вот и все.

Существует множество способов получить конфигурацию в приложении. Если вы считаете, что «Explicit is better than implicit», то вы, вероятно, хотите:

  1. Поместите свой конфиг в модуль, как celeryconfig.py
  2. импортировать модуль, где ваше приложение определить или используется. import celeryconfig
  3. Примените объект модуля к вашему приложению. app.config_from_object(celeryconfig)

файл Пример celeryconfig.py

from datetime import timedelta 

BROKER_URL = "redis://redis.local:6379/0" 
BROKER_TRANSPORT_OPTIONS = {'fanout_prefix': True, 'fanout_patterns': True, 'visibility_timeout': 480} 
CELERY_RESULT_BACKEND = BROKER_URL 

CELERYBEAT_SCHEDULE = { 
    'addrandom-to-16K-every-2-seconds': { 
     'task': 'celery_test.tasks.addrandom', # notice that the complete name is needed 
     'schedule': timedelta(seconds=2), 
     'args': (16000, 42) 
    }, 
} 

CELERY_TIMEZONE = 'UTC' 

Попытка поместить его в файл как beatschedule.py и затем запустить celery -A beatschedule beat поможет вам AttributeError: 'module' object has no attribute 'celery'

Я создал this project демо Celerybeat в действии как описано в документах. Я считаю, что он лучше показывает, как все это работает, чем чтение документов в одиночку. Я также создал this Docker image, чтобы сделать его работу максимально простой.

Смежные вопросы