#!/usr/bin/pythonimport osfrom os import getpidimport multiprocessingbuild="613719"file1=open('/auto/home/venkam11/python/install-script/build-ddr-file.txt', 'r')def installation(model,ddr,build): cli = "/auto/tools/qa/shared/qa-branch/util/install.pl -durham -restart -silentinstall -model %s -branch 6.2A %s %s" %(model, ddr, build) print cli os.popen2(cli) print "installation has started on %s \n" %ddr如果名称== ' main ':pid=getpid()print("parent process id :{}".format(getpid()))for ddr in file1: print ddr.rstrip() if 'dd4500' in ddr: print "dd4500" model = "dd4500" elif ('apollo' or 'apolloplus') in ddr: print "dd9500" model = "dd9500" elif 'dd2500' in ddr: print "dd2500" model = "dd2500" elif 'dd7200' in ddr: print "dd7200" model = "dd7200" elif 'jupiter' in ddr: print "dd9800" model = "dd9800" ddr = ddr.rstrip() ins=multiprocessing.Process(target=installation, args=(model,ddr,build)) ins.start()基本上我试图读取具有机器名称的文件并使用多处理,我想在我读过的机器上安装操作系统。以上是我的代码,当我运行时,它立即开始在所有机器上安装并且主程序终止。但我希望主程序不要终止,它必须等到子进程完成作业,并返回输出说子进程作业完成。安装 make 需要 1 小时或 2 小时,但我希望显示所有流程作业已完成的消息。任何人都可以在这里帮忙。
2 回答

蛊毒传说
TA贡献1895条经验 获得超3个赞
欢迎使用 Stackoverflow。与线程非常相似,与子join()
进程同步的最简单方法是与它们同步,最常见的是在创建线程/进程中。该os.popen2
调用在subprocess
引入模块时已被弃用,因为它没有对启动的子进程提供必要的控制和通信程度。为此,您已正确推断出您可以使用该multiprocessing
模块。
您的问题使用的技术答案multiprocessing
已经在另一个答案以及这个问题中得到了很好的介绍,它解释了调用实体如何与其子进程同步。通过将每个子进程存储在列表中来处理未知数量的子进程是完全允许的,例如,像这样
for p in my_processes: p.join()
一个更有用的答案可能是该subprocess
模块允许创建和监视其他进程而没有 的开销和复杂性multiprocessing
,它具有您(还)似乎不需要的进程间通信的高级功能。它的文档有很好的示例,说明如何调整旧的和/或不太合适的 Python 代码以使用新模块,因此值得一看。
添加回答
举报
0/150
提交
取消