非常に特殊なデータ処理デーモンを作成する必要があります。
マルチプロセッシングで動作する可能性があると私が考えた方法は次のとおりです。
プロセス #1: いくつかの重要なメタデータを取得するための 1 つのプロセス。それらは毎秒取得できますが、それらのデータはプロセス #2 で利用できる必要があります。プロセス #1 がデータを書き込み、プロセス #2 がデータを読み取ります。
プロセス #2: プロセス #1 で受け取ったものに基づいて実際のデータをフェッチする 2 つのプロセス。フェッチされたデータは (大きな) キューに格納され、「後で」処理されます。
プロセス #3: プロセス #2 で作成されたキューをポーリングし、それらのデータを処理する 2 つ (またはそれ以上) のプロセス。完了すると、新しいキューがいっぱいになり、プロセス #4 で使用されます
プロセス #4 : プロセス #3 によって満たされたキューを読み取り、結果を HTTP 経由で送り返す 2 つのプロセス。
これらすべての異なるプロセスの背後にある考え方は、それらを可能な限り専門化し、可能な限り独立させることです。
これらのプロセスはすべて、ここに実装されているメイン デーモンにラップされます。
multiprocessing.Process
特にデーモン化されるメインの親プロセス内でデーモン(es)を実行する場合、私が想像したことが関連/愚か/オーバーキル/などであるかどうか疑問に思っています。さらに、潜在的なロックの問題について少し心配しています。理論的には、データを読み書きするプロセスは異なる変数/構造を使用するため、いくつかの問題を回避できるはずですが、それでも心配です。
おそらく、私のコンテキストにマルチプロセッシングを使用することは正しいことではありません。これについてのフィードバックをいただければ幸いです。
ノート :
- Redis をデータ構造サーバーとして使用できません
- IPC に ZeroMQ を使用することも考えましたが、マルチプロセッシングでも同じように機能する場合は、別の追加ライブラリを使用することは避けます。
フィードバックをお寄せいただきありがとうございます。