这可能是在类似的情况下被问到的,但在搜索了大约 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(),然后等到它们都完成,我该怎么做?
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()?
do_finish()
您需要在脚本末尾使用对象的连接方法。Thread
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完成执行。
t1
t2
t3