web-dev-qa-db-ja.com

DjangoおよびCelery:定期的なタスクの例

私はしばらくの間Django/Celeryのドキュメントと戦ってきましたが、助けが必要です。

Django-celeryを使用して定期的なタスクを実行できるようにしたいと思います。私はインターネット(およびドキュメント)の周りで、Celeryを使用してこれを達成する方法についていくつかの異なるフォーマットとスキーマを見てきました...

Django-celeryの定期的なタスクの作成、登録、実行の基本的で機能的な例を誰かが手伝ってくれるでしょうか?特に、PeriodicTaskクラスを拡張するタスクを作成して登録する必要があるのか​​、@ periodic_taskデコレータを使用する必要があるのか​​、@ taskデコレータを使用してからタスクのスケジュールを設定する必要があるのか​​を知りたいです。実行。

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

25
Jonathan May

ドキュメントの例 の何が問題になっていますか?

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():
    ....

デコレータ構文 を使用すると、既存の関数/タスクを直接変更せずに定期的なタスクに変換できます。

実行するタスクの場合 celerybeatが実行されている必要があります

38
arie