Bagaimana untuk Mencapai Pelaksanaan Selari Subproses Bash dalam Python: Benang vs. Pilihan Lain?

DDD
Lepaskan: 2024-10-25 16:36:15
asal
204 orang telah melayarinya

How to Achieve Parallel Execution of Bash Subprocesses in Python: Threads vs. Other Options?

Subproses Bash Multithreading dalam Python

Benang adalah penting untuk menyelaraskan tugas, tetapi menggunakannya bersama modul subproses boleh terbukti rumit. Apabila melaksanakan proses bash melalui benang, mereka cenderung berjalan secara berurutan.

Pelaksanaan Selari tanpa Benang

Menggunakan benang tidak diperlukan untuk menjalankan subproses secara selari. Fungsi Popen modul subproses boleh mengendalikan perkara ini secara langsung:

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

commands = ['bash commands here']
processes = [Popen(cmd, shell=True) for cmd in commands]

# Perform other tasks while processes run in parallel
for p in processes:
    p.wait()</code>
Salin selepas log masuk

Menghadkan Subproses Serentak

Untuk mengehadkan bilangan proses serentak, pertimbangkan untuk menggunakan multiprocessing.dummy.Pool, yang meniru berbilang pemprosesan.Pool tetapi memanfaatkan benang:

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

commands = ['bash commands here']
pool = Pool(2) # Limit to 2 concurrent processes
for _, returncode in enumerate(pool.imap(partial(call, shell=True), commands)):
    if returncode != 0:
        print(f"Command failed: {returncode}")</code>
Salin selepas log masuk

Alternatif Berasaskan Benang

Pilihan lain untuk mengehadkan proses serentak tanpa menggunakan kumpulan proses termasuk gabungan Barisan Gilir atau pendekatan berikut:

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

commands = ['bash commands here']
running_processes = []

for cmd in islice(commands, 2):
    running_processes.append(Popen(cmd, shell=True))

while running_processes:
    for i, process in enumerate(running_processes):
        if process.poll() is not None:
            running_processes[i] = next(islice(commands, 1), None)</code>
Salin selepas log masuk

Penyelesaian Khusus Unix

Untuk sistem berasaskan Unix, pertimbangkan untuk menggunakan os.waitpid() bersama-sama dengan pendekatan di atas untuk elakkan gelung sibuk. Saya harap ini merangkumi pelbagai pilihan yang tersedia untuk subproses bash multithreading dalam Python dan menangani isu pelaksanaan berurutan yang dihadapi. Jika anda mempunyai sebarang pertanyaan lanjut, sila hubungi!

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Pelaksanaan Selari Subproses Bash dalam Python: Benang vs. Pilihan Lain?. 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!