DjangoでCeleryを使用して非同期マルチスレッドタスクをスケジューリングする

Django
|
DjangoでCeleryを使用して非同期マルチスレッドタスクをスケジューリングする


Web アプリケーションでのタスク管理は、特に時間のかかる操作を非同期で実行する必要がある場合は複雑になることがあります。人気の Web フレームワークである Django は、Celery を使用して拡張することで、非同期タスクを効率的に処理できます。このブログ記事では、Django アプリケーションで Celery を使用して定期的なタスク スケジュールを設定する方法について説明します。これにより、アプリケーションは指定された間隔でバックグラウンド タスクを実行し、メインのアプリケーション スレッドからタスク処理をオフロードできます。

1. CeleryとDjango Celery Beatをインストールする

この旅は、Celery と django-celery-beat をインストールすることから始まります。これらは、Django でのタスクのスケジュールと実行に不可欠なコンポーネントです。pip を使用してインストールできます。

    pip install celery django-celery-beat
2. Celeryを設定する

Celeryをインストールしたら、Djangoアプリケーションで動作するように設定する必要があります。まず、次のファイルを作成します。 celery.py プロジェクトのメイン ディレクトリにあります。このファイルは Celery を初期化し、Django の設定にリンクします。

    from celery import Celery
    import os

    # Set the default Django settings module for the 'celery' program.
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings')

    app = Celery('your_project_name')

    # Using a string here means the worker will not have to serialize
    # the configuration object to child processes.
    app.config_from_object('django.conf:settings', namespace='CELERY')

    # Load task modules from all registered Django apps.
    app.autodiscover_tasks()

Djangoの起動時にこの設定が確実に読み込まれるようにするには、Celeryアプリを your_project_name/__init__.py ファイル:

    from .celery import app as celery_app

    __all__ = ('celery_app',)
3. Django設定を更新する

次に、CeleryをDjangoの設定に統合するために、 settings.py ファイル。これには、ブローカーと結果のバックエンド (RabbitMQ または Redis) の指定が含まれます。

    CELERY_BROKER_URL = 'redis://localhost:6379/0'  # or 'amqp://localhost//' for RabbitMQ
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERY_TIMEZONE = 'UTC'

    from celery.schedules import crontab

    CELERY_BEAT_SCHEDULE = {
        'task-name': {
            'task': 'myapp.tasks.task_function',
            'schedule': crontab(minute=0, hour=0),  # Executes daily at midnight
        },
    }
4. タスクを定義する

さて、あなたのタスクが何であるかを定義する時が来ました。 tasks.py Djangoアプリ内のファイル(例: myapp )をクリックし、タスク機能を追加します。

    from celery import shared_task

    @shared_task
    def task_function():
        # Logic for your asynchronous, multithreaded task
        print("Task is executing")

ここ、 @共有タスク Celery によって提供されるデコレータであり、関数をタスク呼び出し可能としてマークします。

5. Celery Workerを実行してビートする

最後に、Celery ワーカーと beat を実行して、タスクの処理と構成に応じたスケジュールを開始する必要があります。

    # Start Celery Worker
    celery -A your_project_name worker -l info

    # Start Celery Beat
    celery -A your_project_name beat -l info

これらのコマンドは、非同期タスクを処理するワーカーと、定期的なタスクを管理する beat プロセスを起動します。これらのコマンドを実行する前に、Redis や RabbitMQ などのメッセージ ブローカーが実行されていることを確認してください。

これらの手順に従うことで、Django アプリケーションは定期的な非同期タスクを効率的に処理できるようになり、アプリケーションのパフォーマンスと応答性が向上します。Celery は強力なツールであり、この設定により、より複雑なタスク処理のアイデアを探求する準備が整います。




転載免責事項: このコンテンツは著作権で保護されており、すべての権利は著作者に帰属します。このページを再投稿または共有することは歓迎しますが、必ず元の情報源への明確なクレジットとこのページへのハイパーリンクを提供してください。私たちのコンテンツを尊重していただき、ありがとうございます。

この記事は役に立ちましたか?
196人中196人がこれを役に立つと評価しました。
avatar
John Tanner
創始者

私は20年以上の経験を持つ高度なスキルを持ったソフトウェア開発者であり、クロスプラットフォームのフルスタック開発を行っています。大規模なプロジェクトのアーキテクチャの設計と管理、複雑なシステムの簡素化を専門としています。私の専門知識は、Python、Rust、Djangoの開発にまで及びます。ブロックチェーン技術、人工知能、高い同時実行システム、アプリおよびウェブデータのスクレイピング、API開発、データベースの最適化、プロジェクトのコンテナ化、および本番環境へのデプロイに深い習熟があります。

お問い合わせ John Tanner