在 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中文網其他相關文章!