Python サーバー プログラミング: django-celery を使用したタスク キュー
Web アプリケーションの人気が高まり、ユーザー数が増加する中、最新の Web アプリケーションは、複雑で時間に敏感なタスクを処理して生産性を維持する必要があります。そして安定性。電子商取引 Web サイトでの注文処理やシステム ログ ファイルの処理から、コンピューター ビジョンや自然言語処理の高度なアプリケーションに至るまで、これらのタスクは独立したプロセスで処理する必要があります。
従来のアプローチは cron などのジョブ スケジューラを使用することでしたが、次のような問題がありました。
したがって、これらの問題を解決するには、タスク キュー サービスが必要です。
Python エコシステムでは、Celery が最も一般的に使用されるタスク キューです。これは、分散システム用に設計されたタスク キューであり、同時実行性、スループットの高い Web アプリケーションに適しています。
この記事では、CeleryとDjangoを使ってタスクキューサービスを開発する方法を紹介します。 Celery の Django 統合として Django-Celery を使用します。
まず、Celery と Django-Celery の依存関係をプロジェクトにインストールする必要があります。 pip ツールを使用してインストールできます。
pip install celery django-celery
Celery の使用を開始する前に、Celery を構成する必要があります。これを行うには、celery.py というファイルを作成します。このファイルはプロジェクトのルート ディレクトリに配置する必要があります。ファイルの内容は次のとおりです。
from __future__ import absolute_import, unicode_literals import os from celery import Celery # Set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'example.settings') app = Celery('example') # Using a string here means the worker will not have to # pickle the object when using Windows. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs. app.autodiscover_tasks()
注: settings.py ファイルで指定された構成で Celery を構成する場合は、「example.settings」を実際の Django プロジェクト名に置き換えます。
次に、Django が Celery をサポートするように settings.py ファイルで構成する必要があります。
# Celery Configuration CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json' # app注册 INSTALLED_APPS = ( ... 'django_celery_results', 'django_celery_beat', ... )
ここでは、2 つの主要な設定を構成します。 (1) CELERY_BROKER_URL – これは Celery に Redis をミドルウェア サービスとして使用するよう指示します。 (2) INSTALLED_APPS – アプリケーションに Django-Celery の 2 つのアプリケーションを登録する必要があります。
Celery と Django の構成が完了したので、いくつかのタスクの定義を開始できます。タスクの構造と構文を示すサンプル タスクを作成します。 app/tasks.py ファイルに次の内容を追加します。
from django.core.mail import send_mail from celery import shared_task from datetime import datetime @shared_task def send_email_task(): subject = 'Celery Email Demo' message = 'This email is sent using celery!' from_email = 'demo@example.com' recipient_list = ['recipient@example.com'] send_mail(subject, message, from_email, recipient_list) print('Email Sent Successfully') return None @shared_task def print_time(): now = datetime.now() current_time = now.strftime("%H:%M:%S") print("Current Time =", current_time) return None
ここでは、2 つのタスクを定義します。それらはそれぞれ send_email_task タスクと print_time タスクです。これに注意してください。タスクをshared_taskデコレータで装飾します。これにより、どこからでもタスクにアクセスできるようになり、複数のプロセスからタスクを呼び出すことができるようになります。
タスクを定義したので、次はワーカー プロセスを開始し、実行するタスクを指示する必要があります。
ターミナル ウィンドウを開いて次のコマンドを入力します:
$ celery -A example worker --loglevel=info
この例は Django プロジェクトの名前を表していることに注意してください。ここでは、 --loglevel=info を使用してワーカーのログ レベルを制御します。
Django-Celery は、Django 管理インターフェイスでのタスクの管理とスケジュールをサポートします。 Django-Celery に 2 つのアプリケーションを登録する必要があります。次のコードを admin.py ファイルに追加できます。
from django.contrib import admin from django_celery_beat.admin import PeriodicTaskAdmin, IntervalScheduleAdmin from django_celery_results.models import TaskResult from django_celery_results.admin import TaskResultAdmin from core.tasks import send_email_task, print_time class Tasks(admin.ModelAdmin): actions = ['send_email_task', 'print_time'] def send_email_task(self, request, queryset): send_email_task.delay() send_email_task.short_description = "Send Email Task" def print_time(self, request, queryset): print_time.delay() print_time.short_description = "Print Current Time" admin.site.unregister(TaskResult) admin.site.register(TaskResult, TaskResultAdmin) admin.site.register(IntervalSchedule, IntervalScheduleAdmin) admin.site.register(PeriodicTask, PeriodicTaskAdmin) admin.site.register(Tasks)
ここでは、管理インターフェイスにタスクを追加します。これらのタスクは、[メール タスクの実行] ボタンと [現在の時刻の印刷] ボタンをクリックして実行できます。
これで、Django-Celery を使用してタスク キュー サービスを確立することができました。これをさまざまなアプリケーションに使用したり、WebSocket や HTTP プロトコルなどの通信プロトコルを使用して複数のサーバーに配布したりできます。
結論
この記事では、Celery と Django を使用してタスク キュー サービスを開発する方法を紹介します。 Celery の Django 統合として Django-Celery を使用し、タスクの定義、Celery の構成、ワーカーの開始、タスクのスケジュール設定、タスクの管理の方法を示します。タスク キュー サービスは、複雑で時間のかかるタスクを処理し、Web アプリケーションのパフォーマンスと信頼性を向上させる優れた方法を提供します。
以上がPython サーバー プログラミング: django-celery を使用したタスク キューの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。