最新の Web アプリケーションはかつてないほど高速で便利になっていますが、重いタスクをメインスレッドで作業するのではなく、システムの他の部分に転送する必要がある状況が依然として多くあります。
これらの状況の例は次のとおりです:
では、このような状況にどう対処すればよいのでしょうか?そんな時に役立つのがセロリです。
Celery はオープン ソースのタスク キュー実装であり、多くの場合、Flask や Django などの Python ベースの Web フレームワークと組み合わせて、一般的な要求と応答のサイクルの外側でタスクを非同期に実行します。
つまり、Celery は本質的に分散メッセージングに基づくタスク キューです。実行ユニットまたはタスクは、マルチプロセッシング、gevent、またはイベントレットを使用して 1 つ以上のワーカー上で同時に実行されます。これらのタスクは、同期的に (つまり、準備ができるまで待つ) または非同期的に (つまり、バックグラウンドで) 実行できます。
Celery は、プロデューサー/コンシューマー モデルに基づいた分散タスク キューです。
タスク キューは、スレッドやマシン間で作業を分散するためのメカニズムであり、本質的にプロデューサー (Web アプリケーション) とコンシューマー (Celery ワーカー) の間のメッセージ仲介者です。
Celery はメッセージを通じて対話し、ブローカーはクライアント (プロデューサー) とワーカー (消費者) の間の仲介者として機能します。タスクを開始するには、クライアントがメッセージをキューにプッシュし、ブローカーがそのメッセージをワーカーに配信します。
Celery システムは複数のワーカーとブローカーで構成できるため、高可用性と水平拡張の可能性が得られます。
つまり、Celery クライアントはプロデューサーであり、メッセージ ブローカーを通じて新しいタスクをキューに追加します。次に、Celery ワーカーもメッセージ ブローカーを通じてキューから新しいタスクを取得します。処理が完了すると、結果は結果バックエンドに保存されます。
次の例では、RedisMQ をメッセージ ブローカーとして使用します。
Linux/macOS システムで、次のコマンドを実行して、Redis サーバーをローカルで実行します。
$ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ rm redis-stable.tar.gz $ cd redis-stable $ make
Redis をセットアップした後、次のコマンドを実行して Redis サーバーを実行します。次のコマンドを実行します:
$ redis-server
サーバーはデフォルトのポート 6379 で実行されます。
まず、Python プロジェクトをローカルにセットアップします。
Celery は、pip や easy_install などの標準ツールを通じてインストールできます。次のコマンドを使用して Celery と Redis をインストールします:
pip install celery redis==4.3.4
アプリケーションを実行するには Celery インスタンスが必要です。タスクの作成や管理など、Celery によって実装されるタスクはインスタンスから始まります。
プロジェクト内にファイル task.py を作成します。
From celery import Celery broker_url = 'redi://localhost:6379/0' app = Celery('tasks',broker = broker_url) @app.task def add(x, y): return x+y
ここでは、2 つの数値の合計を返す単純なタスク add() が定義されています。
ターミナルでプロジェクトの場所に切り替え、次のコマンドを使用して Celery Worker を実行します。
$ celery -A tasks worker - loglevel=info
Celery Worker コマンド ラインの詳細については、次を参照してください。ヘルプを使用できます:
$ celery worker - help
Celery では、遅延() メソッドを使用してタスクを呼び出します。
プロジェクトの別のターミナル ウィンドウを開き、次のコマンドを実行します:
$ python
これにより、Python コマンド ラインが開きます。
>> from tasks import add >> add.delay(1,2)
これは、AsyncResult インスタンスを返します。これは、タスクのステータスの確認、戻り値の取得、タスクの完了の待機、および失敗時の例外とトレースバックの取得に使用できます。
add.lay() コマンドを実行すると、タスクはキューにプッシュされ、ワーカーによって取得されます。これは Celery ワーカー ターミナルで確認でき、タスクが受信され、正常に完了したことがはっきりとわかります。
以上がPython Celery を学び、非同期タスクを簡単に完了しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。