Wie kann ich in Python mehrere Bash-Befehle gleichzeitig ausführen?

DDD
Freigeben: 2024-10-26 04:01:27
Original
237 Leute haben es durchsucht

How can I execute multiple Bash commands concurrently in Python?

Parallele Verarbeitung von Bash-Unterprozessen in Python

Das sequentielle Ausführen von Unterprozessen kann die Leistung Ihrer Anwendung beeinträchtigen. Um mehrere Bash-Befehle gleichzeitig auszuführen, können Sie die Threading- und Subprocess-Module in Python nutzen.

Direkte Verwendung von Subprozessen

Threading scheint zwar für die parallele Verarbeitung notwendig zu sein, ist es aber nicht erforderlich. Sie können die Funktion subprocess.Popen verwenden, um Prozesse parallel zu starten:

<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>
Nach dem Login kopieren

Gleichzeitige Unterprozesse begrenzen

Um die Anzahl gleichzeitiger Prozesse zu begrenzen, sollten Sie die Verwendung von Multiprocessing in Betracht ziehen .dummy.Pool-Modul, das Multiprocessing mit Threads simuliert:

<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>
Nach dem Login kopieren

Begrenzung ohne Pools

Sie können die Parallelität auch ohne Thread-Pools einschränken:

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich in Python mehrere Bash-Befehle gleichzeitig ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!