Python のスレッド化モジュールとサブプロセス モジュールを使用して並列 Bash プロセスを生成する方法?
元の質問:
Python のスレッド化モジュールとサブプロセス モジュールを使用して並列 bash プロセスを作成するにはどうすればよいですか?このスタック オーバーフロー応答で説明されているように、スレッドが開始されると、並列実行ではなく連続実行が発生します。
答え:
元の想定に反して、スレッドは必要ありません。 bash サブプロセスの並列実行。次の手法ではさまざまなオプションが提供されます:
直接実行 (スレッドなし):
<code class="python">from subprocess import Popen commands = ['date; ls -l; sleep 1; date', ...] processes = [Popen(cmd, shell=True) for cmd in commands]</code>
multiprocessing.dummy.Pool でスレッドを使用する制限付き同時コマンド:
<code class="python">from functools import partial from multiprocessing.dummy import Pool from subprocess import call pool = Pool(2) for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)): ...</code>
プロセス プールを使用しない同時子プロセスの制限:
<code class="python">from subprocess import Popen from itertools import islice max_workers = 2 processes = (Popen(cmd, shell=True) for cmd in commands) running_processes = list(islice(processes, max_workers)) while running_processes: ...</code>
Unix システムに関する注意:
Unix プラットフォームでは、子プロセスが終了するのを待つために os.waitpid(-1, 0) をブロックしてビジー ループを回避します。
以上がスレッドに依存せずに Python で真の並列 Bash プロセス実行を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。