2011-11-22 11 views
24

私はしばらくDjango/Celeryの文書と戦い続けていますし、助けが必要です。DjangoとCeleryの例:定期的な仕事

django-celeryを使用してPeriodic Tasksを実行したいと考えています。私は、セロリを使ってこれを達成する方法についてインターネット(およびドキュメント)のいくつかの異なるフォーマットとスキーマを見てきました。ジャンゴ・セロリの定期的な仕事ですか?特に、PeriodicTaskクラスを拡張して登録するか、@periodic_taskデコレータを使うべきかどうか、@taskデコレータを使用してタスクのスケジュールを設定する必要があるかどうかを知りたい実行。

3つの方法すべてが可能かどうかは気にしませんが、私は少なくとも1つの方法で動作する例を見たいと思います。本当に助けに感謝します。

答えて

37

example from the docsの何か問題がありますか?

from celery.task import PeriodicTask 
from clickmuncher.messaging import process_clicks 
from datetime import timedelta 


class ProcessClicksTask(PeriodicTask): 
    run_every = timedelta(minutes=30) 

    def run(self, **kwargs): 
     process_clicks() 

あなたはデコレータを使用して同じタスクを書くことができ:

from celery.task.schedules import crontab 
from celery.task import periodic_task 

@periodic_task(run_every=crontab(minute="*/30")) 
def process_clicks(): 
    .... 

decorator syntax単にあなたがそれらを直接変更することなく、定期的なタスクに既存の機能/タスクを有効にすることができます。

実行するタスクについてcelerybeat must be running

+0

あなたの答えをありがとう。デコレータが正確に何のためにあるのか、なぜ同じ2つのフォームが存在するのかを知ることは良いことです。 PeriodicTasksを登録する必要はありません。私は、この例題がドキュメントでは見つけにくいことを発見しました。再度、感謝します。 –

+0

ねえ、ここ は、ドキュメントから別の例である:http://ask.github.com/celery/reference/celery.decorators.html あなたはデコレータを使用している場合、明示的にタスクを登録する必要はありません。 Django(https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#registering-the-tag)にtemplatetagsとフィルタを登録しているオプションにかなり似ています。それをもっとよく知っている。 – arie

+0

もう一度ご協力いただきありがとうございます。 –

関連する問題