2

メインプログラムは次のようなものです。

PREPARE PARAMETERS FOR CHILD PROCESSES
subprocess.Popen('python child.py param=example1'.split(' '))
subprocess.Popen('python child.py param=example2'.split(' '))
...

起動した子プロセスの各インスタンスを監視するメインプログラムを作成し、実行されていない場合は対応するパラメータで再起動する方法。

メインプロセス内にマルチスレッドアーキテクトを実装する代わりに、子プロセスの複数のインスタンスを実行し続ける目的は、可能な限り多くのCPUとデータベースのスループットを利用することです。

4

1 に答える 1

5

.pid子プロセスのsをキーとして、それらを対応する値として再起動するためのコマンドラインを使用してdictを保持します。すなわち:

childid = []
for cmdline in cmdlines:
  p = subprocess.Popen(cmdline.split())
  childid[p.pid] = cmdline

os.waitは、子プロセスが終了するたびに戻ります。子プロセスの(pid、exitstatus)を提供します。したがって、適切に再起動して、を維持するだけchildidです。すなわち:

while mustcontinue:
  pid, exitstat = os.wait()
  cmdline = childid.pop(pid)
  p = subprocess.Popen(cmdline.split())
  childid[p.pid] = cmdline

おそらく、この無限ループがいつ終了するかについていくつかの基準がありますmustcontinue。ここでは、それらの基準の名前として使用しました;-)。

于 2009-10-26T05:28:06.690 に答える