2017-08-29 4 views
0

私は多くのファイルで実行する必要があるスクリプトを持っています。各ファイルには、異なるファイルを生成する外部コマンドの実行がありますが、別のフォルダで同じファイルで操作する必要があります。しかし、たとえばProc2.1ため、 スレッド最適化。ファイルのリストで多くのコマンドを実行する

Proc1_File1 -> Proc2.1_File1 -> Proc2.2_File1 -> Proc3.File1 -> Proc4.File1 
Proc1_File2 -> Proc2.1_File2 -> Proc2.2_File2 -> Proc3.File2 -> Proc4.File2 
Proc1_FileN -> Proc2.1_File2 -> Proc2.2_FileN -> Proc3.FileN -> Proc4.FileN 

は、だから私は、この例でプロセスの合計を持っているでしょうし、 Proc2.2を同時に実行することができます。

私はこのような何かを持っているでしょう。

また、主にProc2.2Proc3.3のために同時に実行されるプロセスの数を制限する必要があります。これは、外部コマンドが非常にメモリを消費するため、同時に4~5個のプロセスを実行すると非常に低いメモリ。

この質問はとても一般的ですが、私はどこから始めてこの問題を解決するのか分かりません。すべてのプロセスを順番に実行しなければならないかのように、時間がかかり過ぎるでしょう。

だから、私はキューを使う必要があるかもしれないと思います。私は、リストを使用して外部コマンドの実行を制限し、ここでは例えばのように待つされています:

__list_commands.append(Popen(__command, shell=True, cwd=str(__p.parent))) 
exit_codes = [p.wait() for p in __list_commands] 

それは最初のプロセスを実行する機能の一部になります。しかし、これはコマンドの終了が次のプロセスを実行するのを待つので、順番に実行され、各プロセスを並行して実行し、それぞれのプロセスを最初に実行するproc1、次にproc2を実行します。

ありがとうこのような一般的な質問には申し訳ありません。

答えて

0

ないあなたがプロセスを必要としていることを確認してください..しかし、念のためには、ここを見て:あなたは、単にスレッドを必要とする https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor

または多分? https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor

3つのスレッドを起動すると、同じCPUで実行され、タスクが計算集約型である場合は、それぞれのCPUの33%が使用されることに注意してください。

関連する問題