当前位置: 首页 > 知识库问答 >
问题:

如何并行运行多个子进程并等待它们在Python中完成

慕容成文
2023-03-14

我正在尝试将bash脚本迁移到Python。

bash脚本并行运行多个OS命令,然后在继续之前等待它们完成,即:

命令

我希望使用Python子进程实现同样的目标。这可能吗?如何等待subprocess.call命令完成后再继续?

共有1个答案

孟承嗣
2023-03-14

您仍然可以使用popen,它采用与subprocess.call相同的输入参数,但更加灵活。

subprocess.call:完整的函数签名与Popen构造函数的签名相同--该函数将提供的所有参数直接传递给该接口。

一个区别是,subprocess.call阻塞并等待子进程完成(它构建在popen之上),而popen不阻塞,因此允许您并行启动其他进程。

请尝试以下操作:

from subprocess import Popen
commands = ['command1', 'command2']
procs = [ Popen(i) for i in commands ]
for p in procs:
   p.wait()
 类似资料:
  • 我的makefile中的一个目标是一个非常耗时的CPU任务。但是我可以分割工作负载并并行运行任务几次,以加快整个过程。 我的问题是make不会等待所有过程完成。 考虑一下这个简单的脚本,名为“代码> MyTask.SH <代码>: 现在,让我们从bash脚本调用它,并使用等待所有任务完成: 产出如预期: 但是在Makefile中尝试相同的方法时: 它不起作用: 当然,我可以创建多个目标,这些目标可

  • 我正在试图理解如何为多个子进程构建并行计算管道。正如我所看到的,每个子进程块等待前一个代码块运行,而我有一个管道,它对前一个运行没有依赖关系,并且可以并行处理。我想知道这是不是可能的,如果是这样的话,一个示例语法来展示如何做到这一点将是一个很大的帮助!提前道谢。

  • 返回的流量 返回一个 如果您不能回答我的问题,请至少告诉我如何并行地执行多个API调用,并在WebClient中等待结果

  • 问题内容: 我正在为用户创建一个小仪表板,使他可以运行特定作业。我正在使用Django,因此我希望他能够单击链接以开始工作,然后将页面返回给他并显示该工作正在运行的消息。工作结果将在以后通过电子邮件发送给他。 我相信我应该使用,但是我不确定。所以在伪代码中,这是我想要做的: 问题答案: 这将在后台启动子流程。你的脚本将继续正常运行。

  • 所以我注意到虽然它在继续处理python脚本之前等待命令完成,但除了使用之外,我没有办法获得stdout。是否有其他的函数调用会等待它完成?(我还尝试了) 注意:我正在尝试避免调用

  • 问题内容: 我有两个分开的阻塞队列。客户端通常使用第二个阻塞队列中的第一个来检索要处理的元素。 在某些情况下,客户端对两个阻塞队列中的元素感兴趣,无论哪个队列首先提供数据。 客户端如何并行等待两个队列? 问题答案: 您可以尝试在某种循环中使用该方法,以仅在指定时间量内等待一个队列,然后再轮询另一个队列。 除此之外,我会说在另一个线程上为每个队列运行阻塞操作并为您的主应用程序提供回调接口是另一个稍微