我正在尝试创建一些 Celery 定期任务,其中一些需要能够在运行时更改 run_every 时间。芹菜文档说我应该能够通过将 run_every 属性转换为属性来做到这一点(http://packages.python.org/celery/faq.html#can-i-change-the-interval-of-a-运行时的周期性任务)。
这是我正在做的事情:
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 时,出现以下错误:
[2010 年 9 月 9 日星期四 15:44:40:CRITICAL/828]:celerybeat 引发异常:“datetime.timedelta”对象没有属性“is_due”
然后它会关闭。Celery 文档并没有真正讨论将 run_every 设为属性时要返回的内容,而且我在谷歌搜索时也没有任何运气。Celery 更新日志说,自 1.0.0 版以来,它能够在运行时更改定期任务的间隔。
开发。环境:
- Python 2.6.5
- Django 1.2.1
- 芹菜 2.0.2