【发布时间】:2013-08-29 19:17:19
【问题描述】:
基本上,我想使用一个脚本来启动不同目录中的其他脚本并进行后续工作,直到所有“子脚本”都完成为止。我使用 multiprocessing.Pool 将所有子进程放在一起,并使用 wait() 等待全部完成。这是我的脚本:
import os, shutil, subprocess,sys, multiprocessing
rootdir=os.getcwd()
argument=[]
def Openpy(inputinfo):
dirpath, filename= inputinfo
os.chdir(dirpath)
return subprocess.Popen( [ 'python', filename ] )
if __name__=="__main__":
for dirpath, dirname , filenames in os.walk(rootdir):
for filename in filenames:
if filename=='Test.py':
argument.append( [ dirpath, filename ] )
print argument
po=multiprocessing.Pool()
r=po.map_async(Openpy, argument)
po.close()
r.wait()
print 'Child scripts are finished'
子进程正常启动并在一分钟内完成。但是,这些子进程似乎不会将其“完成的消息”返回给父进程。它没有显示“子脚本已完成”。我可以做些什么来更改我的代码,以便它可以正确检测到子进程的结束?
感谢所有帮助!
2013/9/1 9:16 UTC+8
J.F.塞巴斯蒂安的回答被接受了。成功运行并优雅地使用列表推导使整个内容更具可读性。
【问题讨论】:
-
缩进?我认为最后一行也应该缩进一个“制表符”。
标签: python subprocess multiprocessing