のセロリ初期使用
1.はじめに
セロリは、その性質上、Pythonの開発者、シンプル、柔軟で信頼性の高い分散タスクキューである生産者 - 消費者モデルであり、Djangoのリクエスト処理、他の手段によって必要な非同期処理タスクを達成するために、非同期タスクを達成することができません同期されます(フロントエンドのソリューションは、一般的に、AJAX操作である)、及びバックグラウンドセロリは良い選択です。
利点:
- シンプル:セロリおなじみのワークフロー、シンプルな構成
- 高可用性:接続が失われたり、タスクの実行中に失敗したとき、セロリは自動的にタスクを再実行しようとしますが発生します
- クイック:セロリは、1つのプロセスは、毎分の作業の何百万人を処理することができます
- 柔軟性:様々な成分がほとんどセロリを延長してカスタマイズすることができますされています
2.作品
タスク
タスク:非同期タスクと定期的なタスク
ブローカー
Message Brokerは,,ミドルウェアのタスクを受け、タスクがキューに格納されます。RabbitMQの、Redisの、アマゾンSQS、MongoDBは 、Memcachedのので、それは仲介者としての役割を果たすことができます。
ワーカー
タスク実行部は、メッセージキューから削除タスクを実行する責任があり、これは、1つまたは複数を起動することができ、これはコアが分散達成される機械の異なるノードで開始されてもよいです。
バックエンド
結果記憶、RabbitMQの、Redisの、Memcachedの、SQLAlchemyの 、DjangoのORMは、Apache Cassandraの、Elasticsearchの記憶方法は、として使用することができます
3.インストール
私は、メッセージングミドルウェアのRedisとして、ここで使用しています
3.1セロリのインストール
pip install -U Celery
3.2は、単純な使用します。
プロジェクトディレクトリ
celert_tasksという名前のpythonパッケージフォルダの下にプロジェクトフォルダを作成し、ファイルやconfig.py main.pyファイルを作成し、最終的にあなたがtask.pyファイルを作成した電子メールフォルダを送信するタスクを作成し、ディレクトリ次のように。
config.py:セロリの設定ファイル
大文字の内部の内容をconfig.pyの、そしてRedisのデータベースが使用されている使用していません
# 配置文件
BROKER_URL = 'redis://127.0.0.1/5'
main.pyファイルの内容:
# 启动文件
from celery import Celery
# 告知celery 使用django的配置文件进行配置
import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = "shanghuiproject.settings.dev"
# 创建应用
app = Celery('shanghui')
# 导入celery的配置文件
app.config_from_object('celery_tasks.config')
# 任务
app.autodiscover_tasks(['celery_tasks.msg','celery_tasks.email'])
# 终端启动任务
# celery -A 任务模块名 worker -l info
タスクモジュールを作成します。
あなたはMSGをフォルダ内のフォルダに新しいファイルをcelery_tasks作成する前に電子メールを保存し、電子メールやSMS検証タスクを送信するために使用されています
一例として、確認メールを送信するには
、電子メールでtasks.pyファイルフォルダを作成するには:
# 在当前的tasks里面书写邮件发送任务
from django.core.mail import send_mail
from django.conf import settings
from celery_tasks.main import app
@app.task(name='send_mail')
def send_email(email, url):
print('进入send_email任务')
subject = '新的传奇' # 邮件主题
message = '点击链接激活邮箱:' # 邮件内容
sender = settings.EMAIL_FROM # 邮件发送者
receiver = [email,] # 接收邮件的邮箱
url_string = '<a href=' + url + '>点击链接</a>'
send_mail(subject=subject, message=message, from_email=sender, recipient_list=receiver,html_message=url_string)
対応するserializers.pyファイルは、コードを変更します。
from celery_tasks.email.tasks import send_email
url = 'http://127.0.0.1:8000/users/varifyemail/?token='+token
to_email = validated_data['email']
try:
send_email.delay(to_email, url)
except Exception as e:
print(e)
ターミナルでは、労働者は、次のコードが開始を入力してください
celery -A 任务模块名 worker -l info