Bagaimanakah saya boleh melaksanakan berbilang arahan Bash secara serentak dalam Python?

DDD
Lepaskan: 2024-10-26 04:01:27
asal
238 orang telah melayarinya

How can I execute multiple Bash commands concurrently in Python?

Pemprosesan Selari Subproses Bash dalam Python

Menjalankan subproses secara berurutan boleh menghalang prestasi aplikasi anda. Untuk melaksanakan berbilang arahan bash secara serentak, anda boleh memanfaatkan modul penjalinan dan subproses dalam Python.

Menggunakan Subproses Secara Terus

Walaupun penjalinan mungkin kelihatan perlu untuk pemprosesan selari, ia tidak diperlukan. Anda boleh menggunakan fungsi subproses.Popen untuk melancarkan proses secara selari:

<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>
Salin selepas log masuk

Menghadkan Subproses Serentak

Untuk mengehadkan bilangan proses serentak, pertimbangkan untuk menggunakan pelbagai pemprosesan Modul .dummy.Pool, yang mensimulasikan berbilang pemprosesan menggunakan benang:

<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>
Salin selepas log masuk

Menghadkan Tanpa Kumpulan

Anda juga boleh mengehadkan konkurensi tanpa kumpulan benang:

<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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan berbilang arahan Bash secara serentak dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!