python multithreading等到所有线程完成

可能是在类似的情况下提出的,但是经过大约20分钟的搜索,我找不到答案,所以我会提出。


我已经编写了一个Python脚本(让我们说:scriptA.py)和一个脚本(让我们说了scriptB.py)。


在scriptB中,我想使用不同的参数多次调用scriptA,每次运行大约需要一个小时(它是一个巨大的脚本,做了很多事情。。不用担心),并且我希望能够运行scriptA同时具有所有不同的参数,但是我需要等到所有参数都完成后才能继续;我的代码:


import subprocess


#setup

do_setup()


#run scriptA

subprocess.call(scriptA + argumentsA)

subprocess.call(scriptA + argumentsB)

subprocess.call(scriptA + argumentsC)


#finish

do_finish()

我想同时运行所有程序subprocess.call(),然后等到它们全部完成后,该怎么办?


我试图像这里的例子一样使用线程:


from threading import Thread

import subprocess


def 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()?


largeQ
浏览 2315回答 3
3回答

富国沪深

您需要在脚本末尾使用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完成执行。

跃然一笑

将线程放在列表中,然后使用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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python