できるだけ多くの質問に答えようと思います。
これはセロリを使用して行うことができますか(そしてこれを行う必要がありますか?
はい、できます
私はdjangoを使用しています。プレーンセロリよりもdjango-celeryを使用する必要がありますか?
Djangoはセロリを適切にサポートしており、開発中の生活をはるかに楽にします
これらのタスクはそれぞれ、発生したことをログに記録したり、他のタイプの分岐を行ったりするなど、他のタスクを生み出す可能性があります。これは可能ですか?
副作用のみについてignore_result=trueのタスクを使用してサブタスクを開始できます
タスクは取得したデータを返す可能性がありますか?つまり、セロリを介してKbのデータ(この場合は基になるredis)を返す可能性がありますか、それともDBに書き込み、そのデータへのポインターを渡すだけですか?
結果をdbに入れてから、idを渡すと、ブローカーとワーカーが幸せになることをお勧めします。データ転送/ピクルスなどが少なくなります。
各タスクは主にI/Oバウンドであり、最初はWebスレッドからのgeventを使用してリクエストをファンアウトし、キューイング全体の設計をスキップする予定でしたが、別のコンポーネントで再利用されることが判明しました。 Qsの往復全体をリアルタイムで維持しようとすると、おそらく多くの作業者がキューをほとんど空にしていることを確認する必要があります。またはそれは? gevent workerpoolを実行すると、これに役立ちますか?
プロセスはioバウンドであるため、geventは間違いなくここで役立ちます。ただし、gevent pool'd workerの同時実行性は、私も答えを探しています。
gevent固有のタスクを作成する必要がありますか、それともネットワークIOでgevent pooldealを自動的に使用しますか?
プールで使用すると、Geventは自動的にモンキーパッチを適用します。ただし、使用するライブラリはgeventでうまく機能するはずです。それ以外の場合、simplejson(cで記述されている)を使用して一部のデータを解析すると、他のgeventグリーンレットがブロックされます。
特定のタスクに優先順位を割り当てることは可能ですか?
特定のタスクに特定の優先順位を割り当てることはできませんが、それらを別のキューにルーティングしてから、さまざまな数のワーカーがそれらのキューをリッスンするようにします。特定のキューのワーカーが多いほど、そのキューでのそのタスクの優先度が高くなります。
それらを整理するのはどうですか?
チェーンは秩序を維持する1つの方法です。コードは要約するのに良い方法です。セロリが面倒を見てくれるので、心配する必要はありません。 gevent poolを使用している場合でも、最終的にはタスクの実行順序について推論することができます。
セロリを飛ばして昆布だけ使うべきですか?
ユースケースが時間の経過とともにより複雑なものに変化しない場合、およびceleryd +自分で監視することでプロセスを管理する意思がある場合は、可能です。また、セロリモンや花などのツールに付属しているタスクの監視を気にしない場合は
セロリは、延期することができ、時間に敏感ではない「タスク」に向けられているようです。
Celeryはスケジュールされたタスクもサポートします。それがあなたがその声明によって意味したことであるならば。
このリアルタイムを維持しようとするのは嫌ですか?
私はそうは思わない。消費者が十分に速い限り、それはリアルタイムと同じくらい良いでしょう。
他にどのようなテクノロジーを検討する必要がありますか?
セロリに関しては、結果ストアを賢く選択する必要があります。私の提案は、cassandraを使用することです。リアルタイムデータ(書き込みとクエリの両方)に適しています。 redisまたはmongodbを使用することもできます。結果ストアとして、独自の一連の問題が発生します。ただし、構成を少し調整することで、大きな効果が得られます。
セロリとはまったく異なるものを意味する場合は、asyncio(python3.5)とzeromqを調べて同じことを実現できます。それについてはこれ以上コメントできません。