CeleryとRQを使用する場合の長所と短所[終了]


101

現在私はいくつかのバックグラウンドジョブの実装を必要とするPythonプロジェクトに取り組んでいます(主に電子メールの送信と大量のデータベース更新のため)。タスクブローカーにはRedisを使用しています。したがって、この時点では、CeleryRQの 2つの候補があります。これらのジョブキューについてはある程度の経験がありましたが、このツールを使用した経験を共有してください。そう。

  1. CeleryとRQを使用する場合の長所と短所。
  2. CeleryとRQの使用に適したプロジェクト/タスクの例。

セロリはかなり複雑に見えますが、フル機能のソリューションです。実際、私はこれらすべての機能が必要だとは思いません。反対側から見ると、RQは非常に単純です(たとえば、構成、統合)が、いくつかの便利な機能(たとえば、タスクの取り消し、コードの自動再読み込み)が不足しているようです


3
残念ながら、この種の質問はこのサイトのフォーマットに適合しません。FAQを参照してください。このような質問は、あいまいな回答につながる傾向があり、これも非常に古くなります。特定の問題についてお手伝いできる場合は、別の質問を投稿してください。
Martijn Pieters

ところで、rq-dashboardを使用してもタスクを取り消すことができるように思えます
Peter Kilczuk 2013

回答:


141

これが、まったく同じ質問に答えようとしたときに見つけたものです。それはおそらく包括的ではなく、いくつかの点で不正確でさえあるかもしれません。

つまり、RQは全体的にシンプルになるように設計されています。セロリは、より堅牢になるように設計されています。どちらも優れています。

  • ドキュメンテーション。RQのドキュメントは複雑ではなく包括的なものであり、プロジェクトの全体的なシンプルさを反映しています。迷ったり、混乱したりすることはありません。Celeryのドキュメントも包括的ですが、内部化するオプションが多すぎるため、最初に設定するときは、何度も再訪することになるでしょう。
  • モニタリング。Celery's FlowerRQダッシュボードはどちらも設定が非常に簡単で、必要なすべての情報の少なくとも90%を提供します

  • ブローカーのサポート。セロリは明らかに勝者であり、RQはRedisのみをサポートしています。これは、「ブローカーとは」に関するドキュメントが少なくなることを意味しますが、Redisが機能しなくなった場合、将来ブローカーを切り替えることができなくなります。たとえば、Instagramは、CeleryでRedisとRabbitMQの両方を検討しました。ブローカーによって保証が異なるため、これは重要です。たとえば、Redis では、メッセージの配信が100%保証されることはありません(執筆時点)。

  • 優先キュー。RQ優先キューモデルはシンプルで効果的で、ワーカーはキューから順番に読み取ります。セロリは、異なるキューから消費するために複数のワーカーをスピンアップする必要があります。どちらのアプローチでも機能します

  • OSサポート。RQは、forkたとえばUnixシステムをサポートするシステムでのみ実行されるため、ここではCeleryが明らかに勝者です。

  • 言語サポート。RQはPythonのみをサポートしていますが、Celeryでは1つの言語から別の言語にタスクを送信できます

  • API。Celeryは非常に柔軟性があります(複数の結果のバックエンド、優れた構成形式、ワークフローキャンバスのサポート)。対照的に、RQ APIは単純です。

  • サブタスクのサポート。Celeryはサブタスクをサポートします(例えば、既存のタスク内からの新しいタスクの作成)。RQがするかどうかわかりません

  • コミュニティと安定性。セロリはおそらくもっと確立されていますが、どちらもアクティブなプロジェクトです。執筆の時点では、Githubにセロリの星は〜3500個あり、RQは〜2000個であり、どちらのプロジェクトも活発な開発を示しています

私の意見では、Celeryはその評判から信じられるほど複雑ではありませんが、RTFMを使用する必要があります。

では、なぜ誰もが(おそらくよりフル機能を備えた)セロリをRQと交換しようとするのでしょうか?私の心の中で、それはすべて単純さに帰着します。自身をRedis + Unixに制限することにより、RQは、よりシンプルなドキュメント、よりシンプルなコードベース、およびよりシンプルなAPIを提供します。これは、タスクキューシステムに関する詳細を作業メモリに保持する代わりに、あなた(およびプロジェクトへの潜在的な貢献者)が気になるコードに集中できることを意味します。私たち全員が一度に頭に入れることができる詳細の数には制限があり、タスクキューの詳細をそこに保持する必要をなくすことで、RQは気になるコードに戻ることができます。その単純さは、言語間タスクキュー、幅広いOSサポート、100%信頼できるメッセージ保証、およびメッセージブローカーを簡単に切り替える機能などの機能を犠牲にしてもたらされます。


1
Subtask support. Celery supports subtasks (e.g. creating new tasks from within existing tasks). I don't know if RQ does 24.05.2019と同様に、RQはサブタスク(キューの内部呼び出し)もサポートしています。
eserdk

1

セロリはそれほど複雑ではありません。基本的には、からステップバイステップの構成を行いtutorialsceleryインスタンスを作成し、関数を装飾してから、で@celery.taskタスクを実行しますmy_task.delay(*args, **kwargs)

あなた自身の評価から判断すると、(主要な)機能がないか、余計なところがあるかを選択する必要があるようです。それは私の本ではあまりにも難しい選択ではありません。


46
私はあなたの評価に全く同意しません。ドキュメントや多数のブログ投稿を読んだ後でも、DebianサーバーでCeleryを正常に実行するために数週間も苦労しました。私が抱えていた主な問題は、構成に問題があった場合、Celeryが問題の可能性についてフィードバックを提供しないことでした。そして、ようやく動作するようになったとき、Celeryスタックの深いところにあるタイプのOSErrorを取得し始めました。Githubに問題を投稿しましたが、誰も助けることができませんでした。10フィートのポールでセロリに再び触れることはありません。
Ray

2
Effin 'OSError man。No such file or directory。どこから始めればいいのかわかりません。今夜初めてRQをやってみます。
MiniGunnR 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.