タスクキューは通常のHTTPリクエスト/レスポンスのサイクルの外側で実行されるバックグラウンド処理を管理します。
HTTPリクエストをきっかけに行われない、またはHTTPレスポンスを返す際のパフォーマンスを著しく低下させる恐れのある処理は非同期で扱います。
例えば、Webアプリケーションは10分毎にGitHub APIからスターが多い順に100個のレポジトリを取得しているとします。タスクキューを使ってGitHub APIの呼び出しを管理し、APIのレスポンスを処理してデータベースに保存しておきます。
他の例として、HTTPリクエスト/レスポンスのサイクルの中でデータベースへのクエリに時間がかかりすぎている場合を挙げましょう。クエリをバックグラウンドで一定時間ごとに実行し、データベースに保存することもできるでしょう。HTTPリクエストが来たら、時間のかかるクエリを発行する代わりに、事前にデータベースに保存した結果を取得するようにします。タスクキューでキャッシング のよう形式で事前に処理しておくことができます。
タスクキューでは以下の様な事もできます。
データベースへのデータの挿入を一度に全て行わずに、時間をかけて複数の独立したデータベースに行う。
15分毎など、一定間隔でデータの集計を行う。
バッチ処理のような、一定の時間に行う処理をスケジュールする。
PythonでのタスクキューのデファクトスタンダードはCeleryです。他のタスクキュープロジェクトは、Celeryが単純な用途に使うには複雑すぎるという観点から開発されている傾向があります。著者はCeleryの使い方を時間をかけて学ぶことをお勧めします。
サードパーティのタスクキューサービスは、タスクキューのデプロイを大規模にスケールアウトする際に生じる複雑な問題を回避します。
あなたのWebアプリケーションの中で、HTTPリクエストに対する処理が遅い関数を探してください。
HTTPリクエストを受け取った際に処理を始める代わりに、一定間隔で事前に処理ができるかを検討します。できるのであれば、他の場所から呼び出し可能な別の関数を書いて、データベースに前もって処理結果を格納しておきましょう。
Celeryのドキュメントを読み、どのように利用できるのかを上記のリソースから学びましょう。
RabbitMQやRedisのようなメッセージブローカーをインストールし、Celeryを導入してみましょう。インストールしたメッセージブローカーとCeleryが動作するように設定してみましょう。
最初のステップとしてCeleryで関数を実行してみましょう。
HTTPリクエストを受け取る関数で事前に処理されたデータを利用するようにしてみましょう。