検索
ホームページバックエンド開発Python チュートリアルPython Celery を学び、非同期タスクを簡単に完了します

最新の Web アプリケーションはかつてないほど高速で便利になっていますが、重いタスクをメインスレッドで作業するのではなく、システムの他の部分に転送する必要がある状況が依然として多くあります。

これらの状況の例は次のとおりです:

  • 定期タスク – 特定の間隔で実行するようにスケジュールされたジョブ。たとえば、日次レポートや月次レポートの生成などです。
  • サードパーティ ツール - アプリケーションは、他のタスクが先に完了するのを待つのではなく、すぐにユーザーに応答を返す必要があります。たとえば、電子メールや通知を送信したり、内部ツールに更新の進行状況を伝えたりします。
  • 長時間実行されるジョブ – 複雑な作業やリソースを大量に消費する作業を実行し、ユーザーがジョブが完了するまで待つ必要があるジョブ。例えば。 DAG ワークフロー、Map-Reduce ベースのタスク、長時間実行される Spark ジョブなど。

では、このような状況にどう対処すればよいのでしょうか?そんな時に役立つのがセロリです。

セロリとは何ですか?

Celery はオープン ソースのタスク キュー実装であり、多くの場合、Flask や Django などの Python ベースの Web フレームワークと組み合わせて、一般的な要求と応答のサイクルの外側でタスクを非同期に実行します。

つまり、Celery は本質的に分散メッセージングに基づくタスク キューです。実行ユニットまたはタスクは、マルチプロセッシング、gevent、またはイベントレットを使用して 1 つ以上のワーカー上で同時に実行されます。これらのタスクは、同期的に (つまり、準備ができるまで待つ) または非同期的に (つまり、バックグラウンドで) 実行できます。

轻松完成异步任务,一文搞懂Python Celery

セロリはどのように作用するのでしょうか?

Celery は、プロデューサー/コンシューマー モデルに基づいた分散タスク キューです。

タスク キューは、スレッドやマシン間で作業を分散するためのメカニズムであり、本質的にプロデューサー (Web アプリケーション) とコンシューマー (Celery ワーカー) の間のメッセージ仲介者です。

Celery はメッセージを通じて対話し、ブローカーはクライアント (プロデューサー) とワーカー (消費者) の間の仲介者として機能します。タスクを開始するには、クライアントがメッセージをキューにプッシュし、ブローカーがそのメッセージをワーカーに配信します。

Celery システムは複数のワーカーとブローカーで構成できるため、高可用性と水平拡張の可能性が得られます。

つまり、Celery クライアントはプロデューサーであり、メッセージ ブローカーを通じて新しいタスクをキューに追加します。次に、Celery ワーカーもメッセージ ブローカーを通じてキューから新しいタスクを取得します。処理が完了すると、結果は結果バックエンドに保存されます。

実際の例

次の例では、RedisMQ をメッセージ ブローカーとして使用します。

Redis のセットアップ

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 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 サイトの他の関連記事を参照してください。

声明
この記事は51CTO.COMで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Apr 25, 2025 am 12:28 AM

Arraysinpython、特にvianumpy、arecrucialinscientificComputing fortheirefficienty andversitility.1)彼らは、fornumericaloperations、data analysis、andmachinelearning.2)numpy'simplementation incensuresfasteroperationsthanpasteroperations.3)arayableminablecickick

同じシステムで異なるPythonバージョンをどのように処理しますか?同じシステムで異なるPythonバージョンをどのように処理しますか?Apr 25, 2025 am 12:24 AM

Pyenv、Venv、およびAnacondaを使用して、さまざまなPythonバージョンを管理できます。 1)Pyenvを使用して、複数のPythonバージョンを管理します。Pyenvをインストールし、グローバルバージョンとローカルバージョンを設定します。 2)VENVを使用して仮想環境を作成して、プロジェクトの依存関係を分離します。 3)Anacondaを使用して、データサイエンスプロジェクトでPythonバージョンを管理します。 4)システムレベルのタスク用にシステムPythonを保持します。これらのツールと戦略を通じて、Pythonのさまざまなバージョンを効果的に管理して、プロジェクトのスムーズな実行を確保できます。

標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?Apr 25, 2025 am 12:21 AM

numpyarrayshaveveraladvantages-averstandardpythonarrays:1)thealmuchfasterduetocベースのインプレンテーション、2)アレモレメモリ効率、特にlargedatasets、および3)それらは、拡散化された、構造化された形成術科療法、

アレイの均質な性質はパフォーマンスにどのように影響しますか?アレイの均質な性質はパフォーマンスにどのように影響しますか?Apr 25, 2025 am 12:13 AM

パフォーマンスに対する配列の均一性の影響は二重です。1)均一性により、コンパイラはメモリアクセスを最適化し、パフォーマンスを改善できます。 2)しかし、タイプの多様性を制限し、それが非効率につながる可能性があります。要するに、適切なデータ構造を選択することが重要です。

実行可能なPythonスクリプトを作成するためのベストプラクティスは何ですか?実行可能なPythonスクリプトを作成するためのベストプラクティスは何ですか?Apr 25, 2025 am 12:11 AM

craftexecutablepythonscripts、次のようになります

numpyアレイは、アレイモジュールを使用して作成された配列とどのように異なりますか?numpyアレイは、アレイモジュールを使用して作成された配列とどのように異なりますか?Apr 24, 2025 pm 03:53 PM

numpyarraysarasarebetterfornumeroperations andmulti-dimensionaldata、whilethearraymoduleissuitable forbasic、1)numpyexcelsinperformance and forlargedatasentassandcomplexoperations.2)thearraymuremememory-effictientivearientfa

Numpyアレイの使用は、Pythonで配列モジュール配列の使用と比較してどのように比較されますか?Numpyアレイの使用は、Pythonで配列モジュール配列の使用と比較してどのように比較されますか?Apr 24, 2025 pm 03:49 PM

NumPyArraySareBetterforHeavyNumericalComputing、whilethearrayarayismoreSuitableformemory-constrainedprojectswithsimpledatatypes.1)numpyarraysofferarays andatiledance andpeperancedatasandatassandcomplexoperations.2)thearraymoduleisuleiseightweightandmemememe-ef

CTypesモジュールは、Pythonの配列にどのように関連していますか?CTypesモジュールは、Pythonの配列にどのように関連していますか?Apr 24, 2025 pm 03:45 PM

ctypesallowsinging andmanipulatingc-stylearraysinpython.1)usectypestointerfacewithclibrariesforperformance.2)createc-stylearraysfornumericalcomputations.3)passarraystocfunctions foreffientientoperations.how、how、becuutiousmorymanagemation、performanceo

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません