完成其他操作后启动线程

时间:2017-09-22 03:24:12

标签: python multithreading

from threading import Thread
Thread(target=do_something1).start()
Thread(target=do_something2).start()

是否有任何条件表明线程已完成?在某些情况下,我只需要在另一个线程完成时启动它。

1 个答案:

答案 0 :(得分:0)

只需使用线程的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+还有一个名为concurrent.futures的新(ish)功能。它们允许您在其他线程(或进程)中执行函数并管理执行,而无需诉诸低级实体(如线程)。这方面的一个例子如下所示。

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")