首页  >  文章  >  后端开发  >  如何在Python中不依赖线程实现真正的并行Bash进程执行?

如何在Python中不依赖线程实现真正的并行Bash进程执行?

Patricia Arquette
Patricia Arquette原创
2024-10-27 05:40:03162浏览

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

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn