Celery は Python Web アプリケーション用のタスクキュー実装で、HTTP リクエスト-レスポンスサイクル以外の作業を非同期に実行するために使用されます。 Web 開発の章で詳しく学ぶか、すべてのトピックの目次を参照してください。
- Celery はなぜ有用なのでしょうか。
- Celeryd と Celerybeat の違いは何ですか。 Celeryのキーコンセプトは、タスクを実行するCeleryデーモン(celeryd)とアスケジューラーであるCelerybeatの違いです。 Celerydは、1つまたは複数のワーカーのトンネルビジョンのセットであり、目の前に置かれたどんなタスクでも処理すると考えてください。 各ワーカーはタスクを実行し、タスクが完了すると次のタスクを受け取ります。このサイクルは継続的に繰り返され、目の前に置くべきタスクがなくなったときだけのんびり待ちます。 アプリケーションは、5秒ごとや週に1回など、時間間隔でタスクを実行するようにCelerybeatに指示することができます。 また、毎週日曜日の午後5時3分のように、特定の日付または時刻にタスクを実行するように指示することもできます。 間隔または特定の時間になると、Celerybeat はジョブを Celeryd に渡し、次の利用可能なワーカーで実行します。 Celery チュートリアルとアドバイス
- Celery with web frameworks
- Celery deployment resources
Celery はなぜ有用なのでしょうか。
Task queue と Celery の実装は、特に Python Web アプリケーション スタックで理解しにくい部分の 1 つです。
あなたが若手開発者であれば、HTTP リクエスト-レスポンス サイクルの外側に移動することが重要である理由が不明確であるかもしれません。 要するに、各リクエストは応答が終了するまでワーカープロセスを拘束するので、WSGI サーバーが受信するリクエストにできるだけ早く応答するようにしたいのです。 キュー内のタスクとして非同期ジョブをスピンアップすることにより、これらのワーカーから仕事を移動することは、WSGI サーバーの応答時間を改善する簡単な方法です。
Celeryd と Celerybeat の違いは何ですか。 Celeryのキーコンセプトは、タスクを実行するCeleryデーモン(celeryd)とアスケジューラーであるCelerybeatの違いです。 Celerydは、1つまたは複数のワーカーのトンネルビジョンのセットであり、目の前に置かれたどんなタスクでも処理すると考えてください。 各ワーカーはタスクを実行し、タスクが完了すると次のタスクを受け取ります。このサイクルは継続的に繰り返され、目の前に置くべきタスクがなくなったときだけのんびり待ちます。 アプリケーションは、5秒ごとや週に1回など、時間間隔でタスクを実行するようにCelerybeatに指示することができます。 また、毎週日曜日の午後5時3分のように、特定の日付または時刻にタスクを実行するように指示することもできます。 間隔または特定の時間になると、Celerybeat はジョブを Celeryd に渡し、次の利用可能なワーカーで実行します。
Celery チュートリアルとアドバイス
Celery は強力ですが、最初に理解するのが難しいかもしれません。 タスク キューの概念について読み、次にこれらの Celery チュートリアルに飛び込んでください。
-
A 4 Minute Intro to Celery は、タスク キューの短い入門用スクリーンキャストです。
-
Celery のアーキテクチャに関するこのブログ投稿シリーズ、Celery in the wild: 実際の世界で非同期タスクを実行するヒントとトリック、Celery でリソース消費型タスクを処理する方法は、Celery の動作とタスク キューでの作業に関するいくつかの難しい点を扱う方法に関する素晴らしいコンテキストを提供します。
-
How to use Celery with RabbitMQ は、Ubuntu VPS でこれらのツールを使用するための詳細なウォークスルーです。
-
Celery – Best Practic は、Celery でやってはならないことを説明し、タスクキューを簡単に操作するためのあまり使われていないいくつかの特性を示しています。
-
Celery Best Practices は、上記のベストプラクティス投稿に続く、別の著者によるもので、Celery を 3 年以上使用して得たいくつかの学習に基づいて構築されている。
-
Common Issues Using Celery (And Other Task Queues) には、データベース トランザクションの使用や失敗したタスクの再試行など、タスク構成で避けるべき間違いについての良いアドバイスが記載されています。
-
Asynchronous Processing in Web Applications Part One and Part Two は、タスクキューとの違いと、なぜデータベースをタスクキューとして使用すべきではないのかを理解するための素晴らしい内容となっています。
-
Checklist to build great Celery async tasks は、タスクキュー構成を設計し、開発環境、ステージング環境、実稼働環境にデプロイする際に従うべき良い習慣のリストを提供するために特に設計されたサイトである。
-
Heroku は、タスクが暗号化されていないネットワーク上で送信される場合、Celery を安全にする方法について書いています。
-
Unit testing Celery tasksexplains は、Celery が実行する関数内のコードをテストする 3 つの戦略を説明しています。 この記事では、Celery タスクを同期的に呼び出してテストすることが、デメリットのない最良の戦略であると結論付けています。 しかし、本番環境での関数の実行方法と同じでないテスト方法は、潜在的にバグを見落とす可能性があることに留意してください。
-
Rollbar monitoring of Celery in a Django appesでは、Rollbarを使ってタスクを監視する方法を説明しています。
-
3 Gotchas for Working with Celeryは、Celeryタスクキュー実装の初心者が覚えておくべきことです。
-
Dask and Celerycomparse Dask.distributed と Celery for Python projects.
-
Python+Celery.DaskとCelery.Celeryは、PythonプロジェクトにCeleryと一緒に配布されるDask.distributedを比較します。この記事では、どちらのタスクキューでタスクを実行するか示すコード例を挙げています。
Celery with web frameworks
Celeryは通常Django, Flask, Pyramidなどのweb frameworkと一緒に使用されます。
-
How to Use Celery and RabbitMQ with Djang は、インストールと Django の基本タスクのセットアップの両方を示す、すばらしいチュートリアルです。
-
Miguel Grinberg は、タスクキュー Celery を Flask で使用することについて、素晴らしい記事を書いています。
-
Set up an asynchronous task queue for Django using Celery and Redisis バックエンドで Redis broker を使って Django ウェブアプリケーション用に Celery タスクキューをセットアップするためのわかりやすいチュートリアルです。
-
Flask asynchronous background tasks with Celery and Redisc Celery with Redis as the broker andFlask for the example application’s framework.
-
Celery and Django and Docker.All Rights Reserved: この記事では、Docker コンテナ内で Django 用の Celery タスクを作成する方法について説明します。 また、
-
Asynchronous Tasks With Django and Celerys では、Celery を Django と統合して周期的タスクを作成する方法を紹介します。
-
Introducing Celery for Python+Djangは、Webアプリケーションを構築するためのフレームワークとしてDjangoとCeleryタスクキューを紹介するもので、
-
Asynchronous Tasks with Falcon and Celeryは、CeleryとWebチュートリアルであまり使われないファルコンのフレームワークを設定する。
-
Custom Celery task states は、カスタム状態の作成に関する高度な投稿で、デフォルトの Celery 構成ではカバーできないアプリケーションの過渡状態のために特に有用である。
-
Asynchronous Tasks with Django and Celery は、Django アプリで長時間実行するタスクを処理するために Celery を設定する方法について説明します。
Celery deployment resources
Celery とそのブローカーは Web および WSGI サーバーと別々に実行するので、展開にさらなる複雑性が追加されます。
-
Rob Golding 氏による「Django in Production」シリーズには、特に Background Tasks に関する投稿が含まれています。
-
Caktus GroupブログのCelery in Productionには、CeleryとRabbitMQ、監視ツール、既存のドキュメントではあまり説明されていない他の側面を使用した経験から得たグッドプラクティスが含まれています。
-
Celeryでの2年間の3つの簡単なヒントには、Celeryの再試行遅延、
-Ofair
フラグ、グローバルタスクタイムアウトに関するいくつかの確かなアドバイスが含まれています。