等待嵌套的Python脚本结束后再继续当前Python脚本。

5

我有一个调用另一个python脚本的python脚本,在另一个python脚本中,它会生成一些线程。如何让调用脚本等待被调用的脚本完全运行结束?

这是我的代码:

while(len(mProfiles) < num):
        print distro + " " + str(len(mProfiles))
        mod_scanProfiles.main(distro)
        time.sleep(180)
        mProfiles = readProfiles(mFile,num,distro)
        print "yoyo"

我该如何等待mod_scanProfiles.main()和所有线程完全完成?(目前我使用time.sleep(180),但这并不是良好的编程习惯)

看起来您没有使用 subprocess 模块。您能展示一下 mod_scanProfiles.main(distro) 的代码吗? - stderr
我实际上没有使用subprocess模块... 我猜想我可能需要使用它,所以我也标记了它。 - Synbitz Prowduczions
2
两种方法:1)使用子进程代替;2)将 mod_scanProfiles.main() 更改为在所有线程完成后再返回。无论哪种方式都不应该太难。 - Jason Orendorff
жҳҜзҡ„пјҢ既然жӮЁжІЎжңүдҪҝз”ЁsubprocessпјҢжӮЁеҸҜиғҪеҸӘйңҖиҰҒжү§иЎҢThread.joinжқҘзӯүеҫ…гҖӮ - stderr
2
要等待线程运行完成,可以使用 .join() 方法。 - Jason Orendorff
1个回答

7
你想修改mod_scanProfiles.main中的代码,使其阻塞直到所有线程都完成。
假设在该函数中调用了subprocess.Popen,只需执行以下操作:
# in mod_scanPfiles.main:
p = subprocess.Popen(...)
p.wait() # wait until the process completes.

如果您目前不在等待线程结束,那么您还需要调用Thread.join文档)来等待它们完成。例如:

# assuming you have a list of thread objects somewhere
threads = [MyThread(), ...]
for thread in threads:
    thread.start()
for thread in threads:
    thread.join()

谢谢提供示例代码。我在我的线程列表上使用了join函数,现在它可以等待而不使用子进程了 :) 谢谢...没想到这么简单... - Synbitz Prowduczions

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接