#!/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()基本上我試圖讀取具有機(jī)器名稱的文件并使用多處理,我想在我讀過的機(jī)器上安裝操作系統(tǒng)。以上是我的代碼,當(dāng)我運(yùn)行時(shí),它立即開始在所有機(jī)器上安裝并且主程序終止。但我希望主程序不要終止,它必須等到子進(jìn)程完成作業(yè),并返回輸出說子進(jìn)程作業(yè)完成。安裝 make 需要 1 小時(shí)或 2 小時(shí),但我希望顯示所有流程作業(yè)已完成的消息。任何人都可以在這里幫忙。
2 回答

蠱毒傳說
TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個贊
歡迎使用 Stackoverflow。與線程非常相似,與子join()
進(jìn)程同步的最簡單方法是與它們同步,最常見的是在創(chuàng)建線程/進(jìn)程中。該os.popen2
調(diào)用在subprocess
引入模塊時(shí)已被棄用,因?yàn)樗鼪]有對啟動的子進(jìn)程提供必要的控制和通信程度。為此,您已正確推斷出您可以使用該multiprocessing
模塊。
您的問題使用的技術(shù)答案multiprocessing
已經(jīng)在另一個答案以及這個問題中得到了很好的介紹,它解釋了調(diào)用實(shí)體如何與其子進(jìn)程同步。通過將每個子進(jìn)程存儲在列表中來處理未知數(shù)量的子進(jìn)程是完全允許的,例如,像這樣
for p in my_processes: p.join()
一個更有用的答案可能是該subprocess
模塊允許創(chuàng)建和監(jiān)視其他進(jìn)程而沒有 的開銷和復(fù)雜性multiprocessing
,它具有您(還)似乎不需要的進(jìn)程間通信的高級功能。它的文檔有很好的示例,說明如何調(diào)整舊的和/或不太合適的 Python 代碼以使用新模塊,因此值得一看。
添加回答
舉報(bào)
0/150
提交
取消