首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待多个Python进程在Windows 7 CMD中完成

等待多个Python进程在Windows 7 CMD中完成
EN

Stack Overflow用户
提问于 2018-01-05 10:59:07
回答 2查看 917关注 0票数 1

我试图在Windows 7(和10)中并行运行多个Python脚本。我从另一个Python脚本中运行它们,它对脚本正在编辑的文件执行更多的功能。我希望外部脚本等待,直到其他脚本运行完毕。我尝试过start /w,但这使得每个脚本在关闭控制台窗口之前都要等待。

本质上,我想做的是让Python等待3个进程完成。最后一个脚本只是一个print("done"),对我来说毫无意义。这对我来说很重要,因为我需要用30来做同样的事情。(在服务器上,有足够的可用线程。)

这是我试图运行的CMD命令。

代码语言:javascript
复制
os.system("start python node1.py & start python node2.py & start python node3.py && start /w printstatement.py")

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-05 12:17:37

使用subprocess.Popen而不是os.system。您将得到3个可以等待的Popen实例。例如:

代码语言:javascript
复制
import subprocess

procs = [subprocess.Popen(['python', 'node{}.py'.format(n)]) 
            for n in range(1, 4)]

retcodes = [p.wait() for p in procs]

如果您想要独立的控制台窗口,比如CMD的start命令如何工作,那么将选项creationflags=subprocess.CREATE_NEW_CONSOLE添加到Popen调用中(仅限于Popen)。如果您想要不创建窗口的单独控制台,请使用creationflags=CREATE_NO_WINDOW (0x08000000)。在这种情况下,他们仍然有控制台标准的I/O;只是没有呈现到窗口。

票数 6
EN

Stack Overflow用户

发布于 2018-01-05 11:25:33

使用异步的解决方案:

代码语言:javascript
复制
import asyncio

commands = [
    'python node1.py',
    'python node2.py',
]

async def run_command(command):
    task = await asyncio.create_subprocess_exec(*command.split())
    await task.wait()

combined_task = asyncio.gather(*(run_command(command) for command in commands))
asyncio.get_event_loop().run_until_complete(combined_task)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48112191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档