Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mencapai Pelaksanaan Proses Bash Selari Benar dalam Python Tanpa Bergantung pada Benang?

Bagaimana untuk Mencapai Pelaksanaan Proses Bash Selari Benar dalam Python Tanpa Bergantung pada Benang?

Patricia Arquette
Patricia Arquetteasal
2024-10-27 05:40:03265semak imbas

How to Achieve True Parallel Bash Process Execution in Python Without Relying on Threads?

Bagaimana untuk Melahirkan Proses Bash Selari dengan Modul pemisahan dan subproses Python?

Soalan Asal:

Bagaimanakah saya boleh menggunakan modul threading dan subproses Python untuk mencipta proses bash selari? Pelaksanaan berturut-turut berlaku dan bukannya pelaksanaan selari apabila utas dimulakan seperti yang diterangkan dalam tindak balas Limpahan Tindanan ini.

Jawapan:

Bertentangan dengan andaian asal, utas tidak diperlukan untuk pelaksanaan subproses bash selari. Teknik berikut menyediakan pelbagai pilihan:

Pelaksanaan Terus (tanpa Benang):

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

commands = ['date; ls -l; sleep 1; date', ...]
processes = [Popen(cmd, shell=True) for cmd in commands]</code>

Perintah Serentak Terhad Menggunakan Benang dengan multiprocessing.dummy.Pool:

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

pool = Pool(2)
for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)):
    ...</code>

Hadkan Proses Anak Serentak Tanpa Kumpulan Proses:

<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))
while running_processes:
    ...</code>

Nota untuk Sistem Unix:

Pada platform Unix, elakkan gelung sibuk dengan menyekat pada os.waitpid(-1, 0) untuk menunggu sebarang proses anak keluar.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Pelaksanaan Proses Bash Selari Benar dalam Python Tanpa Bergantung pada Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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