別の Python スクリプトのコントローラーとして使用したい Python スクリプトがあります。私は 64 個のプロセッサを搭載したサーバーを持っているので、この 2 番目の Python スクリプトの最大 64 個の子プロセスを生成したいと考えています。子スクリプトは次のように呼び出されます。
$ python create_graphs.py --name=NAME
NAME は、XYZ、ABC、NYU などのようなものです。
私の親コントローラー スクリプトでは、リストから name 変数を取得します。
my_list = [ 'XYZ', 'ABC', 'NYU' ]
私の質問は、これらのプロセスを子として生成する最良の方法は何ですか? 一度に子の数を 64 に制限したいので、ステータス (子プロセスが終了したかどうか) を追跡して、世代全体を効率的に実行し続けることができるようにする必要があります。
subprocess パッケージの使用を検討しましたが、一度に 1 つの子しか生成しないため、拒否しました。ようやくマルチプロセッサ パッケージを見つけましたが、スレッド全体とサブプロセスのドキュメントに圧倒されたことを認めます。
現在、私のスクリプトはsubprocess.call
、一度に 1 つの子のみをスポーンするように使用しており、次のようになっています。
#!/path/to/python
import subprocess, multiprocessing, Queue
from multiprocessing import Process
my_list = [ 'XYZ', 'ABC', 'NYU' ]
if __name__ == '__main__':
processors = multiprocessing.cpu_count()
for i in range(len(my_list)):
if( i < processors ):
cmd = ["python", "/path/to/create_graphs.py", "--name="+ my_list[i]]
child = subprocess.call( cmd, shell=False )
一度に 64 人の子供を産み出したいのです。他のスタック オーバーフローの質問で、人々が Queue を使用しているのを見ましたが、それはパフォーマンス ヒットを生み出すように見えますか?