「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Django で SQLite を Celery ブローカーとして使用する

Django で SQLite を Celery ブローカーとして使用する

2024 年 8 月 18 日に公開
ブラウズ:988

Use SQLite as a Celery broker in Django

Celery を使用する場合は Redis と RabbitMQ が頼りになるブローカーになる可能性がありますが、ローカルで開発している場合は過剰に感じる可能性があります。 Celery 5.4 のドキュメントには、SQLite をローカル開発用の実験的ブローカーとして使用できることが記載されています。ただし、Celery のバックエンドとブローカーのページに移動すると、SQL について言及されているのは SQLAlchemy backend のみです。ありがたいことに、このページには「このセクションはバックエンドとブローカーを包括するものではありません」と記載されています。

この投稿では、Django プロジェクトで Celery 用の SQLite ブローカー (または任意の SQL!) を実装する方法を説明します。この投稿は Celery の使い方を教えるものではありません。それについては Celery の公式ドキュメントを確認してください。

始める前に

この投稿では、Celery の公式「Django のファースト ステップ」ガイドの手順を使用して Celery がインストールされた既存の Django プロジェクトがすでにあることを前提とします。 Celery バックエンドは

必須ではありませんが、django-celery-results のインストールと構成についてはガイドの手順に従ってください。 バックエンドブローカー の違いが不明な場合は、私の記事「Celery のタスク、ブローカー、ワーカー、バックエンドについて」を参照してください。

特に明記されている場合を除き、ソース ドキュメントへのすべてのリンクは、発行時 (2024 年 7 月) の Django、Celery、および SQLAlchemy の現行バージョンのものになります。あなたが遠い将来にこれを読んでいるなら、状況は変わっているかもしれません。

SQL ブローカーのセットアップ

Celery はタスクとキューを管理しますが、ブローカーとのメッセージ交換を Kombu と呼ばれる別のライブラリに委任します。 RabbitMQ と Redis は Kombu の最も機能が充実したトランスポート (ブローカー) ですが、Amazon SQS、ZooKeeper、MongoDB 用の仮想トランスポートも備えています。

Kombu のドキュメントの隅に隠れて、PostgreSQL、MySQL、SQLite をサポートする SQLAlchemy Transport Model があります。かつて SQLAlchemy ブローカーは Celery の Web サイトにも文書化されていましたが、それ以降、ライブラリの新しいバージョンでは文書から削除されています。それにもかかわらず、ローカル開発にはまだ十分に機能します。

Django アプリで後続データベースを Celery ブローカーとして使用するには、まず SQLAlchemy をインストールします:


pip インストール SQLAlchemy
pip install SQLAlchemy
Django プロジェクトの settings.py ファイル内で、CELERY_BROKER_URL 設定を使用してブローカーのバックエンドを設定できます:


# BASE_DIR は、プロジェクトのメイン ディレクトリのディレクトリです。 CELERY_BROKER_URL = f"sqlalchemy sqlite:////{BASE_DIR}/broker.sqlite3"
pip install SQLAlchemy
SQLAlchemy

ブローカー URL は 3 つの部分で構成されています:

    文字列 sqlalchemy または sqla (これらは交換可能です)
  1. サイン
  2. SQLAlchemy 接続文字列
Mac/Unix と Windows 上の SQLite では接続文字列が異なります:


# MacOS/Unix CELERY_BROKER_URL = "sqla sqlite:////your/project/path/broker.sqlite3" # Windows CELERY_BROKER_URL = "sqla sqlite:///C:your\\project\\path\\broker.sqlite3"
pip install SQLAlchemy
Postgres を Celery ブローカーとして使用することも、MySQL を Celery ブローカーとして簡単に使用することもできます:


# MySQL CELERY_BROKER_URL = "sqlalchemy mysql://scott:tiger@localhost/foo" #PostgreSQL CELERY_BROKER_URL = "sqla postgresql://scott:tiger@localhost/mydatabase" # pg8000 を使用して PosgreSQL を接続する CELERY_BROKER_URL = "sqla postgresql pg8000://scott:tiger@localhost/mydatabase"
pip install SQLAlchemy
MySQL または PostgreSQL に接続するには、他のライブラリをインストールする必要がある場合があります。インストールするライブラリは SQLAlchemy 接続文字列に影響する可能性があります。詳細については、SQLAlchemy データベースの URL ドキュメントを確認してください。

どのデータベースを選択するかに関係なく、さまざまな環境で簡単に変更できるように、ブローカー URL を環境変数に保存することを検討することをお勧めします。


CELERY_BROKER_URL = os.getenv("CELERY_BROKER_URL")
pip install SQLAlchemy
注意事項

SQLAlchemy トランスポートはおそらく実験的なものであると考えられているため、運用環境での使用は意図されていません。データ損失が発生したり、メッセージが複数回配信される可能性があります。 Celery のブローカーとバックエンドのページにリストされている、より堅牢なブローカーに切り替えることを検討してください。

とはいえ、ローカル開発や小規模なサイドプロジェクトには問題ないかもしれません。しかし、将来 SQLAlchemy をブローカーとして使用する機能がなくなっても、私はショックを受けません。

次のステップ

Celery をローカルで実行すると、キューを利用したアプリケーションの作業を開始できます。ただし、自動リロードがないことが問題点になるかもしれません。 Django アプリケーションで Celery の自動リロードを設定したい場合は、私の投稿「カスタム Django コマンドを使用して Celery ワーカーを自動的にリロードする」を読んでください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/tylerlwsmith/use-sqlite-as-a-celery-broker-in-django-1jne?1 侵害がある場合は、削除するために[email protected]に連絡してください。それ
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3