私はいくつかのCelery定期タスクを作成しようとしていますが、そのうちのいくつかは実行時にrun_everyを変更する機能を備えている必要があります。Celeryのドキュメントには、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をオンにすると、次のエラーが発生します。
[Thu Sep 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