ホームページ >バックエンド開発 >Python チュートリアル >Celery、Redis、Django を組み合わせて使用​​すると、非同期タスク処理の効率が向上します。

Celery、Redis、Django を組み合わせて使用​​すると、非同期タスク処理の効率が向上します。

PHPz
PHPzオリジナル
2023-09-28 18:27:24975ブラウズ

Celery、Redis、Django を組み合わせて使用​​すると、非同期タスク処理の効率が向上します。

Celery、Redis、および Django は、非同期タスク処理の効率を向上させるために一緒に使用されます

はじめに: Web アプリケーションの開発プロセスでは、しばしば次のような問題が発生します。処理する必要がある消費タスク。タスク。これらのタスクをリクエスト処理プロセス内で直接実行すると、ユーザーの待ち時間が長くなり、ユーザー エクスペリエンスにとって非常に不親切です。この問題を解決するには、Celery、Redis、Django を使用して時間のかかるタスクを非同期に処理し、システムのパフォーマンスとユーザー エクスペリエンスを向上させます。

  1. Celery の紹介とインストール
    Celery は、分散メッセージングに基づいて動作し、タスク スケジューリングもサポートするタスク キューです。 Celery のインストールは、pip コマンドで完了できます。

    pip install celery
  2. Redis の紹介とインストール
    Redis は、さまざまなデータ構造と幅広いアプリケーション シナリオをサポートするオープン ソースのメモリ内データベースです。 。このシナリオでは、Redis は主にタスク キューのバックエンド ストレージ実装として使用されます。 Redis のインストールは、次の手順で完了できます。
  3. Redis をダウンロードして解凍します。
  4. 解凍したディレクトリに移動し、make コマンドを使用してコンパイルします。
  5. make install コマンドを使用して、 install
  6. #Django 構成
    まず、以下に示すように、Django プロジェクトの settings.py ファイルに Celery 構成項目を追加する必要があります。

    # settings.py
    
    # Celery配置
    CELERY_BROKER_URL = 'redis://localhost:6379/0'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'

    上記の構成では、 CELERY_BROKER_URL および CELERY_RESULT_BACKEND は、タスク キューと結果ストレージのバックエンドとして使用される Redis のアドレスとポートを指定します。

次に、次のようにプロジェクトの urls.py ファイルに Celery の設定を追加します。

# urls.py

from django.urls import path
from .views import AsyncTaskView

urlpatterns = [
    path('async-task/', AsyncTaskView.as_view(), name='async_task'),
]
  1. タスク関数の作成
    タスクを作成します。 Django アプリの py ファイルを作成し、その中に非同期タスク関数を定義します。サンプル コードは次のとおりです。

    # app/tasks.py
    
    from celery import shared_task
    import time
    
    @shared_task
    def process_task():
     # 模拟任务处理过程(等待5秒)
     time.sleep(5)
     return 'Task completed'

    上記のコードでは、関数を Celery タスク関数に変換するために @shared_task デコレータが使用されています。

  2. ビューの実装
    Django の views.py ファイルでビュー クラスを定義して、リクエストを受信し、非同期タスク関数を呼び出します。以下はサンプル コードです:

    # app/views.py
    
    from django.views import View
    from .tasks import process_task
    from django.http import HttpResponse
    
    class AsyncTaskView(View):
     def get(self, request):
         # 调用异步任务
         task = process_task.delay()
         return HttpResponse('Task started')
  3. Celery サービスの開始
    次のコマンドを使用して Celery ワーカー プロセスを開始します:

    celery -A your_project_name worker --loglevel=info

    次の点に注意してください your_project_nameDjango プロジェクト名に置き換えます。

  4. Test
    ブラウザで http://localhost:8000/async-task/ にアクセスします。すべてが正常であれば、返される結果は「Task」であることがわかります。始めました』。現時点では、タスクはバックグラウンドで非同期に処理されており、ユーザーのリクエスト処理をブロックしません。

結論: Celery、Redis、Django を組み合わせて使用​​すると、時間のかかるタスクを非同期で処理でき、システムのパフォーマンスとユーザー エクスペリエンスが向上します。タスク キューとタスク スケジュールは Celery を使用して簡単に管理でき、バックエンド ストレージとして Redis を使用することでタスク データの信頼性の高い保存が可能になります。このソリューションは Web アプリケーション開発で広く使用でき、その実装プロセスは具体的なコード例を通じて示されています。

以上がCelery、Redis、Django を組み合わせて使用​​すると、非同期タスク処理の効率が向上します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。