DjangoでCeleryを使用してタイミングタスクを実現(djceleryを使用)
一.引用
Djangoはpython言語の下で比較的人気のあるWebフレームワークであり、Djangoを使用して独自のWebサーバを実現する企業や開発者が増えている.Webサーバの開発過程では、Webサーバ側とユーザー側の簡単な論理的インタラクションを実現するだけでなく、いくつかのタイミングタスクを実現する場合があります.以下の例を挙げる. Redisデータベースのレコードを定期的に削除またはキャッシュする より高いデータベースアクセス性能を追求するために、RedisをMySqlデータベースのキャッシュとして使用しました.通常アクセスしているデータをRedisに入れ、Mysqlに定期的に格納します.そして期限切れのRedisデータを削除します.その場合、このタスクをタイミングよく完了する必要があります. レポートの生成 例えば、あなたはWeb電子商取引サーバーを持っていて、毎日ユーザーが上で買い物をしています.ユーザーごとの毎月の消費額を簡単に統計するために、データベースに月統計レポートを設計しました.その後、定時タスクを使用して、毎月の1日に統計を行い、データベースを取得し、ユーザーごとの先月の消費金額を計算し、月統計レポートに1つずつ格納します.では、このレポートを生成するタスクは、前に述べた毎月の1番で、タイミングよく完了します. タイミング送信メッセージ また、あなたのサイトでユーザーの誕生日が来ると、彼の誕生日に、ユーザーのメールボックスに誕生日おめでとうの祝福を送りたいと思っています.これもタイミングタスクで実現されます.
これらの例は,いずれもタイミングタスクが必要である.Pythonでは、Celeryモジュールを使用してこのタスクを完了します.ネット上でCeleryの博文について多くて、大多博文の論理は比較的に混乱して、そのためこの博文がありました.読者にはっきりした認識を持って、そして良い実戦が出てくることを望んでいます.
このブログでは、Broker、WorkerなどのCeleryの動作原理について説明していません.実戦の前に、これらの概念を理解しなければならない.ネット上にはすでにこのような内容がたくさんあるので、文章の終わりに参考文書を貼って、読者の勉強を便利にしました.
二.celery,Django,Djcelery
常に明確なのは、 CeleryはPythonのサードパーティ製ライブラリであり、Celeryを常に独立したモジュールと見なして他のモジュールを操作することができるため、任意のPythonのプロジェクトに使用することができます.したがって、Djangoプロジェクトで使用するCeleryも使用できますが、DjangoでCeleryを使用する方法は2つあります. Celeryのみが使用されます. Celery+djcelery. を併用
方法1:DjangoにCeleryのタスク・スクリプトが1つ追加されていることに相当します.Djangoのデータベースを操作するには、Djangoを操作するためにCeleryにDjango環境を追加で構成する必要があります.
方法2:djceleryを使用することで、Djangoデータベースをタスクで簡単に直接操作でき、最終的なタスクはDjangoのバックグラウンドで関連するタスクを表示および変更できます.
2つの方法の選択: 以上の説明から,方法1は方法2より1つのdjceleryモジュールを導入することが少なく,Djangoと結合した環境を独自に構成する必要があるという欠点がある.方法2は、比較的便利で安心し、Djangoのバックグラウンドで自分のタスクを管理することができます.だからDjangoでCeleryを使うなら、方法2を強くお勧めします.
この2つの方法は私が相応の博文を書いた.このブログでは、djceleryを使用する方法2について説明しています.使用しないdjceleryがCeleryモジュールのみを使用する方法1については、私のもう一つのブログを参照してください. DjangoでCeleryを使用してタイミングタスクを実装(djceleryを使用しない)
しかし、それらは本質的に同じです.
三.Djangoディレクトリ構造
Djangoプロジェクトのディレクトリ構造の例を次に示します. - app - admin.py - views.py - urls.py - models.py - tasks.py - pro - settings.py - urls.py - urls.py - models.py - manage.py
上記のディレクトリの
四.setting.pyの構成
Celeryを設定するには、setting.pyファイルを次のように構成する必要があります.
1.djceleryに参加する
上記
2.celeryパラメータの設定
setting.pyのファイルの最後に、次のceleryパラメータ構成を追加し、コードを貼ってから説明します.
上記のコードの意味:
djcelery.setup_loader()が実行されると、CeleryはINSTALLD_を表示します.APPSに含まれるすべてのappディレクトリのtasks.pyファイルは、taskとマークされたメソッドを見つけてcelery taskに登録します.
1.
brokerは代理人で、workerにタスクを配布して実行します.私が使っているのはRedisをbrokerとして使っています.もちろん他のbrokerを使ってもいいです.例えば、公式にRabbitMQをお勧めします.
一部のブログでは、キーワードの構成について説明しています:
私はこのキーワードを構成していません.構成されていない場合、Djangoはデフォルトのデータベース(あなたが指定したormデータベース)を使用し、その結果をbackendとします.そのため、書く必要はなく、Djangoのデフォルト設定のデータベースを使うといいです. 2.
上記の第1文はインポート先のタスクファイルであり、第2文はタイムゾーンの設定であり、第3文はdjango-celeryのデフォルトのデータベーススケジューリングモデルを使用することを示し、タスク実行周期はデフォルトで指定されたormデータベースに存在する.
より深いCelery構成:(http://www.cnblogs.com/ajianbeyourself/p/4950758.html) 3.
上記はタイミングを設定する時間構成で、
http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html
5.Tasksタスク
各タスクは本質的に関数であり、tasks.pyで実行したい関数を書き込むとよい.私のtasks.pyは以下の通りです:私が書いたすべての任務は臭いし、長いので、具体的な詳細は省略します.
読者が自分でタイミングタスクを実現する必要がある場合、上記のtask関数は必ず自分で定義しなければならないので、参考にしました.私の上の3つのタスクは、
タスクは関数にすぎません.この関数はいつ呼び出されるかは、
6.タイミングタスクの開始
続行: Djangoバックグラウンドにログインすると、
7.推薦文
1.より深いCelery構成:(http://www.cnblogs.com/ajianbeyourself/p/4950758.html)
転載先:https://www.cnblogs.com/wumingxiaoyao/p/8521567.html
Djangoはpython言語の下で比較的人気のあるWebフレームワークであり、Djangoを使用して独自のWebサーバを実現する企業や開発者が増えている.Webサーバの開発過程では、Webサーバ側とユーザー側の簡単な論理的インタラクションを実現するだけでなく、いくつかのタイミングタスクを実現する場合があります.以下の例を挙げる.
これらの例は,いずれもタイミングタスクが必要である.Pythonでは、Celeryモジュールを使用してこのタスクを完了します.ネット上でCeleryの博文について多くて、大多博文の論理は比較的に混乱して、そのためこの博文がありました.読者にはっきりした認識を持って、そして良い実戦が出てくることを望んでいます.
このブログでは、Broker、WorkerなどのCeleryの動作原理について説明していません.実戦の前に、これらの概念を理解しなければならない.ネット上にはすでにこのような内容がたくさんあるので、文章の終わりに参考文書を貼って、読者の勉強を便利にしました.
二.celery,Django,Djcelery
常に明確なのは、 CeleryはPythonのサードパーティ製ライブラリであり、Celeryを常に独立したモジュールと見なして他のモジュールを操作することができるため、任意のPythonのプロジェクトに使用することができます.したがって、Djangoプロジェクトで使用するCeleryも使用できますが、DjangoでCeleryを使用する方法は2つあります.
方法1:DjangoにCeleryのタスク・スクリプトが1つ追加されていることに相当します.Djangoのデータベースを操作するには、Djangoを操作するためにCeleryにDjango環境を追加で構成する必要があります.
方法2:djceleryを使用することで、Djangoデータベースをタスクで簡単に直接操作でき、最終的なタスクはDjangoのバックグラウンドで関連するタスクを表示および変更できます.
2つの方法の選択: 以上の説明から,方法1は方法2より1つのdjceleryモジュールを導入することが少なく,Djangoと結合した環境を独自に構成する必要があるという欠点がある.方法2は、比較的便利で安心し、Djangoのバックグラウンドで自分のタスクを管理することができます.だからDjangoでCeleryを使うなら、方法2を強くお勧めします.
この2つの方法は私が相応の博文を書いた.このブログでは、djceleryを使用する方法2について説明しています.使用しないdjceleryがCeleryモジュールのみを使用する方法1については、私のもう一つのブログを参照してください. DjangoでCeleryを使用してタイミングタスクを実装(djceleryを使用しない)
しかし、それらは本質的に同じです.
三.Djangoディレクトリ構造
Djangoプロジェクトのディレクトリ構造の例を次に示します. - app - admin.py - views.py - urls.py - models.py - tasks.py - pro - settings.py - urls.py - urls.py - models.py - manage.py
上記のディレクトリの
tasks.py
ファイルは私が新しく作成したもので、appのディレクトリの下に置いて、Celeryタスク全体で、私はこのファイルしか作成しませんでした.四.setting.pyの構成
Celeryを設定するには、setting.pyファイルを次のように構成する必要があります.
1.djceleryに参加する
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'djcelery', # djcelery
'app', )
上記
INSTALLED_APPS
の中で私は関係のないモジュールを省略して、djcelery
に参加すればいいことに注意します. 2.celeryパラメータの設定
setting.pyのファイルの最後に、次のceleryパラメータ構成を追加し、コードを貼ってから説明します.
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/6'
CELERY_IMPORTS = ('app.tasks', )
CELERY_TIMEZONE = TIME_ZONE
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
# , . from celery.schedules import crontab CELERYBEAT_SCHEDULE = { # : 24 (del_redis_data) u' redis ': { "task": "app.tasks.del_redis_data", "schedule": crontab(hour='*/24'), "args": (), }, # : 12:30 , (back_up1) u' ': { 'task': 'app.tasks.back_up1', 'schedule': crontab(minute=30, hour=0), "args": () }, # : 1 6:00 , (back_up2) u' ': { 'task': 'app.tasks.back_up2', 'schedule': crontab(hour=6, minute=0, day_of_month='1'), "args": () }, }
上記のコードの意味:
djcelery.setup_loader()が実行されると、CeleryはINSTALLD_を表示します.APPSに含まれるすべてのappディレクトリのtasks.pyファイルは、taskとマークされたメソッドを見つけてcelery taskに登録します.
1.
BROKER_URL = 'redis://127.0.0.1:6379/6'
brokerは代理人で、workerにタスクを配布して実行します.私が使っているのはRedisをbrokerとして使っています.もちろん他のbrokerを使ってもいいです.例えば、公式にRabbitMQをお勧めします.
一部のブログでは、キーワードの構成について説明しています:
CELERY_RESULT_BACKEND
、たとえば:CELERY_RESULT_BACKEND = 'amqp://guest@localhost//' #
私はこのキーワードを構成していません.構成されていない場合、Djangoはデフォルトのデータベース(あなたが指定したormデータベース)を使用し、その結果をbackendとします.そのため、書く必要はなく、Djangoのデフォルト設定のデータベースを使うといいです. 2.
CELERY_IMPORTS = ('app.tasks', )
CELERY_TIMEZONE = TIME_ZONE
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
上記の第1文はインポート先のタスクファイルであり、第2文はタイムゾーンの設定であり、第3文はdjango-celeryのデフォルトのデータベーススケジューリングモデルを使用することを示し、タスク実行周期はデフォルトで指定されたormデータベースに存在する.
より深いCelery構成:(http://www.cnblogs.com/ajianbeyourself/p/4950758.html) 3.
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
# : 24 (del_redis_data)
u' redis ': {
"task": "app.tasks.del_redis_data", "schedule": crontab(hour='*/24'), "args": (), },
上記はタイミングを設定する時間構成で、
crontab
の使い方について、公式のドキュメントの説明は非常に詳細です(ドキュメントの末尾の表):http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html
5.Tasksタスク
各タスクは本質的に関数であり、tasks.pyで実行したい関数を書き込むとよい.私のtasks.pyは以下の通りです:私が書いたすべての任務は臭いし、長いので、具体的な詳細は省略します.
# coding=utf-8
from celery import task
@task()
def del_redis_data(): # redis 。 @task() def back_up1(): # 。 @task() def back_up2(): # 。
読者が自分でタイミングタスクを実現する必要がある場合、上記のtask関数は必ず自分で定義しなければならないので、参考にしました.私の上の3つのタスクは、
setting.py
ファイルのCELERYBEAT_SCHEDULE
の3つのタイミング構成に対応しています.タスクは関数にすぎません.この関数はいつ呼び出されるかは、
setting.py
の構成によって異なります.6.タイミングタスクの開始
続行: Djangoバックグラウンドにログインすると、
7.推薦文
1.より深いCelery構成:(http://www.cnblogs.com/ajianbeyourself/p/4950758.html)
転載先:https://www.cnblogs.com/wumingxiaoyao/p/8521567.html