2017-09-22 94 views
-1
from threading import Thread 
Thread(target=do_something1).start() 
Thread(target=do_something2).start() 

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

+0

您需要加入线程,加入意味着等待它完成。看看文档https://docs.python.org/2/library/threading.html – geckos

+0

看看join方法。还有更高级别的模块['concurrent.futures'](https://docs.python.org/3/library/concurrent.futures.html),它将允许您避免使用线程等低级组件。 –

回答

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+还有一个新的(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") 
相关问题