如何使用 Python 的執行緒和子進程模組產生並行 Bash 進程?
原始問題:
如何使用Python的執行緒和子進程模組來建立並行bash進程?當依照 Stack Overflow 回應中所述啟動執行緒時,會發生連續執行而不是並行執行。
答案:
與最初的假設相反,執行緒對於並行 bash 子程序執行。以下技術提供了各種選項:
直接執行(無線程):
<code class="python">from subprocess import Popen commands = ['date; ls -l; sleep 1; date', ...] processes = [Popen(cmd, shell=True) for cmd in commands]</code>
使用帶有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>
在沒有進程池的情況下限制並發子進程:
<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>
Unix 系統注意事項:
在Unix 平台上,透過阻塞os.waitpid(-1, 0) 來等待任何子進程退出來避免繁忙循環。
以上是如何在Python中不依賴執行緒實現真正的並行Bash進程執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!