ホームページ > バックエンド開発 > Python チュートリアル > スレッドに依存せずに Python で真の並列 Bash プロセス実行を実現するにはどうすればよいですか?

スレッドに依存せずに Python で真の並列 Bash プロセス実行を実現するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-27 05:40:03
オリジナル
284 人が閲覧しました

How to Achieve True Parallel Bash Process Execution in Python Without Relying on Threads?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート