ご挨拶!
ほとんどの
Django開発者は非同期タスク実行システムである
Celeryを聞いたことがあると思います。
約1年前、ハブでセロリの使用方法について説明した
良い記事がありました。 ただし、結論で述べたように、ceelery 2.0はすでにリリースされており(2.2.7が現在安定版です)、djangoとの統合が別のパッケージに移動され、
その他の変更が行われて
います 。
この記事は、主にDjangoの使用を開始する初心者に役立ちます。また、システムで非同期および/または定期的なタスクを実行できるもの(たとえば、古いセッションのクリーンアップ)が必要です。 Celeryをインストールして構成し、Djangoと最初から最後まで機能する方法、およびその他の便利な設定と落とし穴を紹介します。
まず、システムに
python-setuptoolsパッケージが存在するかどうかを確認し、存在しない場合はインストールします。
aptitude install python-setuptools
セロリのインストール
Celery自体のインストールは非常に簡単です。
easy_install Celery
オリジナルの詳細:
http :
//celeryq.org/docs/getting-started/introduction.html#installation最初に与えられたリンクである
MongoDBがバックエンドとして使用された記事では、他のDjangoアプリケーションがデータを保存するバックエンドおよびメッセージブローカーと同じデータベースを使用する方法を示します。
ジャンゴセロリ
django-celeryパッケージをインストールし
ます 。
easy_install django-celery
すでに述べたように、
django-celeryはCeleryとDjangoの便利な統合を提供します。 特に、
Django ORMをバックエンドとして使用してCeleryジョブを保存し、
INSTALLED_APPSにリストされているDjangoアプリケーションのCeleryジョブを自動的に検索してログに記録します。
django-celeryをインストールしたら、次を設定する必要があります。
- djceleryをINSTALLED_APPSリストに追加します。
INSTALLED_APPS += ("djcelery", )
- django設定ファイル{{settings.py}}に次の行を追加します。
import djcelery djcelery.setup_loader()
- データベースに必要なテーブルを作成します。
./manage.py syncdb
- データベースを定期的なタスクの保存場所として設定し、 settings.pyに追加します 。
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
このオプションを使用すると、django管理パネルから定期的なジョブを追加/削除/編集できます。
mod_wsgiを使用する場合、
WSGI構成ファイルに次の行を追加します。
import os os.environ["CELERY_LOADER"] = "django"
ジャンゴ昆布
Celeryに適したメッセージブローカーを見つける必要があります。この記事では、DjangoデータベースをKombu(PythonのAMPQ実装)のメッセージストアとして使用できるパッケージ
django-kombuを使用します。
パッケージをインストールします。
easy_install django-kombu
カスタマイズ:
打ち上げ
セロリとセロリビートのプロセスを開始します。
(celerybeatを使用しなくても、定期的なタスクを開始および実行できます。Celerybeatは、スケジュールされたスケジュール済みタスクに対して実行する必要があります)
開始後、django管理パネルで定期的なタスクの様子を確認できます。

Django ORM以外(RabbitMQなど)をセロリバックエンドとして使用する場合、Django管理パネルで他のすべてのタスクのステータスも表示できます。これは次のようになります。

詳細:
http :
//stackoverflow.com/questions/5449163/django-celery-admin-interface-showing-zero-tasks-workers更新:私は悪魔について少し追加しています。それは最初はうまくいかないかもしれないからです。
セロリをサービスとして実行する
ここからセロリ起動スクリプトをダウンロードします:
https :
//github.com/ask/celery/tree/master/contrib/generic-init.d/を適切な権限で
/etc/init.dディレクトリに配置します。
/ etc / default ディレクトリで、
celerydファイルを作成します。
このファイルからスクリプトが起動設定を取得します。
--concurrencyオプションは、セロリプロセスの数を設定します(デフォルトでは、この数はプロセッサの数に等しくなります)。
その後、
serviceを使用してセロリを開始でき
ます :
service celeryd start
詳細:
docs.celeryproject.org/en/latest/tutorials/daemonizing.html#daemonizingセロリを扱う
django-celeryをインストールすると、
INSTALLED_APPSにリストされているすべてのアプリケーションのすべてのtasks.pyモジュールからセロリジョブが自動的に登録されます。 タスクモジュールに加えて、
CELERY_IMPORTSパラメーターを使用して追加のモジュールを指定することもできます。
CELERY_IMPORTS=('myapp.my_task_module',)
また、
CELERY_SEND_TASK_ERROR_EMAILSオプションをアクティブにすることも役立ちます。これにより、
Celeryは、
ADMINS変数にリストされているアドレスへのすべてのエラーを通知します。
セロリの課題を書くことは、前の記事からあまり変わっていません。
from celery.task import periodic_task from celery.schedules import crontab @periodic_task(ignore_result=True, run_every=crontab(hour=0, minute=0)) def clean_sessions(): Session.objects.filter(expire_date__lt=datetime.now()).delete()
唯一の違いは、デコレータを
celery.taskからインポートする必要があることです。
デコレータモジュールは非推奨になりました。
いくつかのパフォーマンスノート:
これらおよびその他のCeleryのヒントの詳細:
http :
//celeryproject.org/docs/userguide/tasks.html#tips-and-best-practices