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>
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>
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>
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!