ホームページ > バックエンド開発 > Python チュートリアル > Celery Redis Django を使用して Web サイトの非同期タスク処理プロセスを最適化する

Celery Redis Django を使用して Web サイトの非同期タスク処理プロセスを最適化する

WBOY
リリース: 2023-09-27 08:38:01
オリジナル
859 人が閲覧しました

使用Celery Redis Django优化网站异步任务处理流程

Celery Redis Django を使用して Web サイトの非同期タスク処理プロセスを最適化する

前書き:
Web サイトを開発するとき、次のような時間のかかる操作が発生することがよくあります。電子メールの送信、レポートの生成、データのクロールなど。これらの操作が同期している場合、操作が完了するのを待っている間にユーザーがフリーズし、ユーザー エクスペリエンスが悪化します。この問題を解決するには、非同期タスクを使用して時間のかかる操作を処理できます。Celery は現在、Python 非同期タスク処理フレームワークとして人気があります。

Celery は、タスクをキューに入れ、Celery ワーカー ノード (Worker) によって非同期に実行できる分散タスク キュー フレームワークであり、それによってタスクの非同期実行を実現します。 Celery を使用する場合、Redis は一般的に使用されるメッセージ ブローカー (ブローカー) であり、Celery タスクの配信に使用されます。

Celery Redis Django の使用法をよりわかりやすく説明するために、この記事では電子メールの送信機能を例に挙げます。以下のパートに分けて説明します:

1. 環境準備
2. Celery と Redis のインストール
3. Celery の設定
4. Django での非同期タスクの実装
5. Celery Worker を開始する
6. テスト モジュールを作成する
7. テストを実行して概要を確認する

1. 環境の準備
開発を開始する前に、Python、Django がインストールされていることを確認する必要があります。そしてリディス。インストールされていない場合は、pip を通じてインストールできます。

2. Celery と Redis のインストール
$ pip install celery
$ pip install redis

3. Celery の設定
次の行を settings.py ファイルに追加します。 Django プロジェクトの構成:

Redis をメッセージ ブローカーとして使用する

BROKER_URL = 'redis://localhost:6379/0'

タスクの結果をローカルに保存する

CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

タスク モジュールの定義

CELERY_IMPORTS = (

'your_app.tasks',
ログイン後にコピー
ログイン後にコピー

)

デフォルトのタスク キュー名を設定する

CELERY_DEFAULT_QUEUE = 'default'

4. Django で非同期タスクを実装する
Django プロジェクトの一部のアプリで task.py ファイルを作成し、非同期タスクの関数を保存します。たとえば、電子メール アプリを作成し、電子メールを送信するための非同期タスクを email/tasks.py に記述します。

emails/tasks.py

from celery import task
from django.core.mail import send_mail

@task()
def send_email_task(subject, message、from_email、recipient_list):

send_mail(subject, message, from_email, recipient_list)
ログイン後にコピー
ログイン後にコピー

ここでのタスク デコレーターは Celery によって提供され、関数を Celery タスクとして登録するために使用されることに注意してください。

5. Celery Worker の起動
ターミナルを開き、Django プロジェクトのルート ディレクトリに切り替え、次のコマンドを実行して Celery Worker を起動します。

$ celery -A project_name worker -l info

ここで、project_name は Django プロジェクトの名前です。

6. テスト モジュールを作成する
Django プロジェクトのアプリの views.py にメールを送信するためのビュー関数を記述し、そのビュー関数を特定の URL にバインドします。

views.py

from django.shortcuts import render
from .tasks import send_email_task

def send_email_view(request):

if request.method == 'POST':
    subject = request.POST.get('subject')
    message = request.POST.get('message')
    from_email = request.POST.get('from_email')
    recipient_list = [request.POST.get('recipient_email')]
    
    # 调用异步任务
    send_email_task.delay(subject, message, from_email, recipient_list)
    
    return render(request, 'success.html')

return render(request, 'send_email.html')
ログイン後にコピー

7。テストと概要の実行
Django プロジェクトを起動し、ブラウザから send_email_view ビューに対応する URL アドレスにアクセスし、関連情報を入力してメール送信ボタンをクリックします。

電子メールがバックグラウンドで非同期に送信され、インターフェイスがプロンプト メッセージで即座に応答するため、ユーザーは電子メールが送信されるまで待つ必要がないことがわかります。これは、Celery Redis Django を使用して実装された非同期タスク処理プロセスです。

概要:
Celery Redis Django を使用すると、Web サイトに非同期タスク処理を簡単に実装できます。時間のかかる操作を Celery の非同期タスクに組み込むことで、Web サイトのパフォーマンスとユーザー エクスペリエンスを効果的に向上させることができます。具体的な使用プロセスでは、Celery をインストールして構成し、タスク モジュールを定義した後、Django の非同期タスク関数を呼び出して非同期処理を実現する必要があります。異なるタスクを異なるワーカーを通じて同時に処理できるため、システム全体の同時処理能力が向上します。
具体的なコード例:

settings.py

メッセージ ブローカーとしての Redis

BROKER_URL = 'redis://localhost:6379/0'

タスク結果をローカルに保存する

CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

タスク モジュールを定義する

CELERY_IMPORTS = (

'your_app.tasks',
ログイン後にコピー
ログイン後にコピー

)

デフォルトのタスクキュー名を設定します

CELERY_DEFAULT_QUEUE = 'default'

tasks.py

from celery import task
from django.core。 mail import send_mail

@task()
def send_email_task(subject, message, from_email,recipient_list):

send_mail(subject, message, from_email, recipient_list)
ログイン後にコピー
ログイン後にコピー

views.py

from django.shortcuts import render
from .tasks import send_email_task

def send_email_view(request):

if request.method == 'POST':
    subject = request.POST.get('subject')
    message = request.POST.get('message')
    from_email = request.POST.get('from_email')
    recipient_list = [request.POST.get('recipient_email')]
    
    # 调用异步任务
    send_email_task.delay(subject, message, from_email, recipient_list)
    
    return render(request, 'success.html')

return render(request, 'send_email.html')
ログイン後にコピー

以上がCelery Redis Django を使用して Web サイトの非同期タスク処理プロセスを最適化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート