为了账号安全,请及时绑定邮箱和手机立即绑定

使用多处理检测多个子进程的终止

使用多处理检测多个子进程的终止

拉丁的传说 2021-11-02 16:47:38
#!/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 代码以使用新模块,因此值得一看。


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号