ホームページ > バックエンド開発 > Python チュートリアル > Bash サブプロセスを Python と並行して実行するにはどうすればよいですか?

Bash サブプロセスを Python と並行して実行するにはどうすればよいですか?

DDD
リリース: 2024-10-27 03:00:03
オリジナル
471 人が閲覧しました

How Can I Execute Bash Subprocesses in Parallel with Python?

Python での Bash サブプロセスによる並列処理

bash サブプロセスの並列実行は、スクリプト作成と自動化における一般的なタスクです。 Python では、サブプロセス モジュールを使用して新しいプロセスを生成し、スレッド モジュールを使用してそれらを同時に実行できます。

ただし、ユーザーがリンクした質問に対する最初の回答で説明されている手法では、次のプロセスが順次実行されます。 bash プロセス。これらを並行して実行するには、次の方法を使用します。

1. multiprocessing.dummy.Pool の使用:

限られた数の同時プロセスで並列実行するには、multiprocessing.dummy.Pool を使用できます。 multiprocessing.Pool.

<code class="python">import multiprocessing.dummy as mp
from subprocess import call

pool = mp.Pool(2)  # Set the maximum number of concurrent commands
for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)):
    if returncode != 0:
        print("%d command failed: %d" % (i, returncode))</code>
ログイン後にコピー

2 に似たスレッドベースのインターフェイスを提供します。手動同時実行制御でのサブプロセスの使用:

スレッドやプロセス プールを使用せずに同時プロセスの数を制限できます。

<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:
    # Check for completed processes and start new ones
    for i, process in enumerate(running_processes):
        if process.poll() is not None:
            running_processes[i] = next(processes, None)
            if running_processes[i] is None:
                del running_processes[i]
                break</code>
ログイン後にコピー

3. os.waitpid() でのサブプロセスの使用 (Unix のみ):

Unix システムでは、os.waitpid(-1, 0) を使用して、子プロセスが終了するのをブロックして待機できます。これにより、ビジー ループの必要がなくなります。

これらのメソッドは、Python を使用して bash サブプロセスの同時実行性を制御するための柔軟なオプションを提供します。

以上がBash サブプロセスを Python と並行して実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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