Djangoでceleryを使用してメール/情報送信タスクを分散処理
8334 ワード
https://liboer.top/articles/detail/celery-use-django/
Celery分散処理
djangoブログでメールサーバを構成すると、ユーザーからコメントが来た場合、メールアラートが送信されます.メールを送信するときにメールの向こうが詰まったり、数秒詰まったりするとdjangoが詰まったり、djangoがサービスできないか、特に時間がかかります.
生産者消費者モデル
djangoはメールをredisのリストに送って、彼に送ってもらいました.
Celeryは,分散型のタスクイベントの処理を実現できる.リアルタイム処理に専念するタスクキューであり、タスクスケジューリングもサポートされます.
インストール
broker-メッセージ伝送のミドルウェアで、生産者がメッセージを送信するとbrokerに送信されます.
backend-メッセージ/タスク結果の格納に使用
worker-作業者、消費/実行brokerにおけるメッセージ/タスクのプロセス
celeryを使用するかどうか:ブロックが発生しているかどうかは、リアルタイムの応答ができません.
使用
きおく
Celeryのストレージにはredisまたはmysqlが必要です
Djangoでのceleryの使用 celeryプロファイル項目を作成する同名ディレクトリの下でceleryを作成する.py アプリケーションの下でtasksを作成する.pyセット定義対応worker関数 ビュー関数は、生産者として機能し、特定のworker関数 をプッシュする.プロジェクトディレクトリの下でworker celery-Aプロジェクトの同名ディレクトリ名worker-l info を起動
Celery分散処理
djangoブログでメールサーバを構成すると、ユーザーからコメントが来た場合、メールアラートが送信されます.メールを送信するときにメールの向こうが詰まったり、数秒詰まったりするとdjangoが詰まったり、djangoがサービスできないか、特に時間がかかります.
生産者消費者モデル
djangoはメールをredisのリストに送って、彼に送ってもらいました.
Celeryは,分散型のタスクイベントの処理を実現できる.リアルタイム処理に専念するタスクキューであり、タスクスケジューリングもサポートされます.
インストール
pip3 install celery
broker-メッセージ伝送のミドルウェアで、生産者がメッセージを送信するとbrokerに送信されます.
backend-メッセージ/タスク結果の格納に使用
worker-作業者、消費/実行brokerにおけるメッセージ/タスクのプロセス
celeryを使用するかどうか:ブロックが発生しているかどうかは、リアルタイムの応答ができません.
使用
# worker
# task.py
from celery import Celery
# app = Celery('libo', broker='redis://:[email protected]:6379/1')
app = Celery('libo', broker='redis://:@127.0.0.1:6379/1') #
#
@app.task
def task_test(a, b):
print("task is running...")
return a+b
# worker
# task.py
# celery -A tasks worker --loglevel=info
# ,
#
# from task import task_test
# task_test.delay()
きおく
Celeryのストレージにはredisまたはmysqlが必要です
from celery import Celery
# app = Celery('libo', broker='redis://:[email protected]:6379/1')
app = Celery('libo',
broker='redis://:@127.0.0.1:6379/1',
backend='redis://:@127.0.0.1:6379/2') #
@app.task
def task_test(a, b):
print("task is running...")
return a+b
#
# from task import task_test
# s = task_test.delay(10, 100)
# s.result
Djangoでのceleryの使用
# celery.py setting.py
from celery import Celery
from django.conf import settings
import os
# linux
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'BlogLee.settings')
app = Celery('bloglee')
app.conf.update(
BROKER_URL='redis://:@127.0.0.1:6379/1',
)
# app worker
app.autodiscover_tasks(settings.INSTALLED_APPS)
# tasks.py
from django.core.mail import send_mail
from BlogLee.celery import app
@app.task
def my_send_mail(title, email_content, email_from, email_to):
send_mail(title, email_content, email_from, email_to)
# views.py
my_send_mail.delay(
title,
email_content,
settings.EMAIL_HOST_USER,
email_to, #
)
# worker
nohup celery -A /mydata/BlogLee/BlogLee worker -P gevent -c 1000 > celery.log 2>&1 &
# nohup: , ,
# -P gevent -c 1000 1000
# > celery.log
# 2>&1 print
# &: