気になったのでウェブサイトで見かけた内容をまとめた。
機能比較
TaskTiger | TaskTiger | TaskTiger | |
---|---|---|---|
実行プロセス | タスク毎にフォーク | ワーカをプーリング | |
ロック | あり | ? | |
リトライ | あり | ? | |
スケジュール済みのタスク | あり | あり | |
ログ | JSONログ | ? | |
管理画面 | あり (Flask) | あり (Django Admin Site) | |
パイプライン | ? | あり | あり |
バックエンド | Redis | Redis, Disque, IronMQ, SQS, MongoDB, Django ORM |
実行プロセス
どのようにタスクを実行するか。
ロック
同一(と思われる)タスクをロックまたは排除することが出来るか。
tasktigerは引数で同一のタスクを排除するっぽい。
リトライ
タスクが一時的なエラーに見舞われた場合にリトライすることができるか。
スケジュール済みのタスク
cronのように定期実行する機能のサポート。
ログ
ログ出力。Django-Qは普通にdjango loggingかな。
管理画面
ジョブキューシステムの管理画面の有無。
パイプライン
グループやチェインなど、複数のジョブの流れを管理することが出来るかどうか。
ディスパッチャ
キューがどこからディスパッチされるか。
TaskTiger
ウェブアプリケーションのような並列性の高いサービスで使われることを想定しているようで、引数をキーにロックを作ったり、重複を排除したり出来るのが便利そう。タスクを毎回フォークするのもメモリ使用の観点(メモリリークの対策)という点でもよさげ。
Django-Q
Django Admin Siteを使用できる。Djangoを使って開発している人であれば、Djangoの流儀に則って設計されているので一番手軽に導入できるソリューションかも。バックエンドが選べることや、管理画面がついてくるのもマル。
ドキュメントから読み取れない機能があるので、実際に使ってみないと何とも言えない。
from django_q.tasks import async
async('some.module.build_hoge', 1)
Luigi
開発元はSpotify
サンプルではフラットファイルから、Map / Reduceまたは任意の加工をしてRDBMSに放り込むような内容がまとめられている(Luigi - Example top artists)。長いバッチを実行するのが主な目的で、いわゆる非同期のジョブキューマネージャとは立ち位置が少し異なりそう。パイプラインも組めるので、定期実行するバッチに向いているみたい。