1

回復力があり、可用性の高い Python API バックエンド サービスを設計しようとしています。コア サービスは、継続的に実行されるように設計されています。サービスは、テナントごとに独立して実行する必要があります。コア サービスはブロッキング サービスであり、各テナントの実行は他のテナントのサービスから独立している必要があるため、これが必要です。

コア サービスは、プロビジョニング サービスによって開始されます。プロビジョナーも継続的に実行されるサービスであり、ハウスキーピング機能を実行する責任があります。つまり、テナントのサインアップ時にコア サービスを開始し、必要な環境と属性を確認し、コア サービスを停止するなどです。

現在、multiprocessingモジュールを使用して、プロビジョナー サービスからコア サービスの子インスタンスを生成しています。テナントごとに 1 つのスレッドを持つマルチスレッド サービスを使用することもオプションですが、いずれかのスレッドがクラッシュすると、他のテナントのサービスが中断されるという欠点があります。理想的には、これらすべてをバックグラウンド プロセスとして実行したいと考えています。問題は

  1. プロビジョナー サービスをデーモン化するmultiprocessingと、そのデーモンが子プロセスを作成できなくなります。ここに書いてある

  2. プロビジョナー サービスが停止すると、すべての子が孤児になります。この状況からどうやって立ち直るか。

multiprocessing明らかに、私はこの使用モデルに従わないソリューションに対してオープンです。

4

2 に答える 2

0

Debianライクでは、デーモン化されていないサービスをラップできます

start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON --chuid $USER --chdir $DIR -- \
    $DAEMON_ARGS 

子供たちは、タスクを処理した後に死ぬ必要があります。親プロセスは非常に単純で、メインループで「タスクを取得 - 子を生成する」だけである必要があります。

于 2013-07-29T08:41:52.297 に答える