Я пытаюсь создать некоторые периодические задачи для сельдерея, и некоторые из них должны иметь возможность изменять время выполнения каждый раз во время выполнения.В документации Celery сказано, что я смогу сделать это, превратив атрибут run_every в свойство (http://packages.python.org/celery/faq.html#can-i-change-the-interval-of-a-periodic-task-at-runtime).
Вот что я делаю:
class ParseSomeStuffTask(PeriodicTask):
def run(self, **kwargs):
# Do stuff
@property
def run_every(self):
if datetime.now().weekday() in [1, 2, 3]:
return timedelta(minutes=15)
else:
return timedelta(seconds=40)
К сожалению, когда япри включении celerybeat я получаю следующую ошибку:
[Чт, 09 сентября 15:44:40 2010: CRITICAL / 828]: исключение celerybeat: объект datetime.timedelta не имеет атрибута is_due'
Затем он закрывается. Документация по Celery на самом деле не касается того, что возвращать, когда свойство run_every становится свойством, и мне не повезло в поиске в Google. Журналы изменений в Celery говорят, что это удалосьизменить интервал периодической задачи во время выполнения начиная с версии 1.0.0.
Среда разработки:
- Python 2.6.5
- Django 1.2.1
- Сельдерей 2.0.2