Python で複数の Bash コマンドを同時に実行するにはどうすればよいですか?

DDD
リリース: 2024-10-26 04:01:27
オリジナル
237 人が閲覧しました

How can I execute multiple Bash commands concurrently in Python?

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

サブプロセスを順番に実行すると、アプリケーションのパフォーマンスが妨げられる可能性があります。複数の bash コマンドを同時に実行するには、Python のスレッド モジュールとサブプロセス モジュールを利用できます。

サブプロセスを直接使用する

並列処理にはスレッドが必要であるように見えるかもしれませんが、実際はそうではありません必須。 subprocess.Popen 関数を使用してプロセスを並列起動できます。

<code class="python">from subprocess import Popen

commands = [
    'date; ls -l; sleep 1; date',
    'date; sleep 5; date',
    'date; df -h; sleep 3; date',
    'date; hostname; sleep 2; date',
    'date; uname -a; date',
]

# Run commands in parallel
processes = [Popen(cmd, shell=True) for cmd in commands]

# Perform other tasks while processes run

# Wait for completion
for p in processes:
    p.wait()</code>
ログイン後にコピー

同時サブプロセスの制限

同時プロセスの数を制限するには、multiprocessing の使用を検討してください。 .dummy.Pool モジュール。スレッドを使用してマルチプロセスをシミュレートします:

<code class="python">from functools import partial
from multiprocessing.dummy import Pool
from subprocess import call

pool = Pool(2)  # Limit to two concurrent commands

# Iterate over commands and return codes
for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)):
    if returncode != 0:
        print("%d command failed: %d" % (i, returncode))</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))  # Start initial processes

while running_processes:
    for i, process in enumerate(running_processes):
        if process.poll() is not None:  # Process has finished
            running_processes[i] = next(processes, None)  # Start new process
            if running_processes[i] is None:  # No new processes
                del running_processes[i]
                break</code>
ログイン後にコピー

以上がPython で複数の Bash コマンドを同時に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!