【问题标题】:Start thread when other is done [duplicate]其他完成后启动线程[重复]
【发布时间】:2017-09-22 03:24:11
【问题描述】:
from threading import Thread
Thread(target=do_something1).start()
Thread(target=do_something2).start()
是否有任何条件表明线程已完成?在某些情况下,我需要仅在另一个线程完成时才启动一个线程。
【问题讨论】:
标签:
python
multithreading
【解决方案1】:
只需使用线程的join 方法等待它完成即可。然后开始下一个线程。
from threading import Thread
from time import sleep
def do_something1():
sleep(1)
return 1
def do_something2():
sleep(1)
return 2
t1 = Thread(target=do_something1)
t1.start()
print("wait for 1")
t1.join()
print("done 1")
t2 = Thread(target=do_something2)
t2.start()
print("wait for 2")
t2.join()
print("done 2")
python 3.2+ 还有一个新的(ish)功能,称为concurrent.futures。它们允许您在其他线程(或进程)中执行函数并管理执行,而无需借助线程等低级实体。一个例子如下所示。
from concurrent.futures import ThreadPoolExecutor
print("use futures")
funcs = [do_something1, do_something2]
with ThreadPoolExecutor(max_workers=1) as e:
for fn in funcs:
ftr = e.submit(fn)
print("submit")
print(ftr.result())
print("done")