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

python multithreading等到所有线程完成

python multithreading等到所有线程完成

largeQ 2019-10-17 10:35:47
可能是在类似的情况下提出的,但是经过大约20分钟的搜索,我找不到答案,所以我会提出。我已经编写了一个Python脚本(让我们说:scriptA.py)和一个脚本(让我们说了scriptB.py)。在scriptB中,我想使用不同的参数多次调用scriptA,每次运行大约需要一个小时(它是一个巨大的脚本,做了很多事情。。不用担心),并且我希望能够运行scriptA同时具有所有不同的参数,但是我需要等到所有参数都完成后才能继续;我的代码:import subprocess#setupdo_setup()#run scriptAsubprocess.call(scriptA + argumentsA)subprocess.call(scriptA + argumentsB)subprocess.call(scriptA + argumentsC)#finishdo_finish()我想同时运行所有程序subprocess.call(),然后等到它们全部完成后,该怎么办?我试图像这里的例子一样使用线程:from threading import Threadimport subprocessdef call_script(args)    subprocess.call(args)#run scriptA   t1 = Thread(target=call_script, args=(scriptA + argumentsA))t2 = Thread(target=call_script, args=(scriptA + argumentsB))t3 = Thread(target=call_script, args=(scriptA + argumentsC))t1.start()t2.start()t3.start()但是我认为这是不对的。我怎么知道他们都已经跑完了才去我家do_finish()?
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

您需要在脚本末尾使用object的join方法Thread。


t1 = Thread(target=call_script, args=(scriptA + argumentsA))

t2 = Thread(target=call_script, args=(scriptA + argumentsB))

t3 = Thread(target=call_script, args=(scriptA + argumentsC))


t1.start()

t2.start()

t3.start()


t1.join()

t2.join()

t3.join()

因此,主线程将等到t1,t2并t3完成执行。


查看完整回答
反对 回复 2019-10-17
?
跃然一笑

TA贡献1826条经验 获得超6个赞

将线程放在列表中,然后使用Join方法


 threads = []


 t = Thread(...)

 threads.append(t)


 ...repeat as often as necessary...


 # Start all threads

 for x in threads:

     x.start()


 # Wait for all of them to finish

 for x in threads:

     x.join()


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 2310 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信