如何使用 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中文网其他相关文章!