首頁 >後端開發 >Python教學 >如何與 Python 並行執行 Bash 子進程?

如何與 Python 並行執行 Bash 子進程?

DDD
DDD原創
2024-10-27 03:00:03472瀏覽

How Can I Execute Bash Subprocesses in Parallel with Python?

在 Python 中使用 Bash 子進程進行並行處理

並行執行 bash 子進程是腳本編寫和自動化中的常見任務。在 Python 中,您可以使用 subprocess 模組產生新進程,並使用 threading 模組並發執行它們。

但是,使用者連結的問題的第一個答案中所描述的技術會導致順序執行bash 進程。要並行運行它們,請使用以下方法:

1.使用multiprocessing.dummy.Pool:

對於有限數量的並發進程的並行執行,可以使用multiprocessing .dummy.Pool。它提供了類似於 multiprocessing.Pool 的基於線程的介面。

<code class="python">import multiprocessing.dummy as mp
from subprocess import call

pool = mp.Pool(2)  # Set the maximum number of concurrent commands
for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)):
    if returncode != 0:
        print("%d command failed: %d" % (i, returncode))</code>

2.使用具有手動並發控制的子進程:

您可以在不使用執行緒或進程池的情況下限制並發進程的數量。

<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:
    # Check for completed processes and start new ones
    for i, process in enumerate(running_processes):
        if process.poll() is not None:
            running_processes[i] = next(processes, None)
            if running_processes[i] is None:
                del running_processes[i]
                break</code>

3.透過os.waitpid() 使用子程序(僅限Unix):

在Unix 系統上,您可以使用os.waitpid(os.waitpid( -1, 0) 來阻止並等待任何子程序退出。這消除了對繁忙循環的需求。

這些方法為使用 Python 控制 bash 子進程中的並發性提供了靈活的選項。

以上是如何與 Python 並行執行 Bash 子進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn