-1
from threading import Thread
Thread(target=do_something1).start()
Thread(target=do_something2).start()
是否有任何條件表明線程已完成?在某些情況下,我只需要在另一個線程完成時啓動一個線程。其他完成時啓動線程
from threading import Thread
Thread(target=do_something1).start()
Thread(target=do_something2).start()
是否有任何條件表明線程已完成?在某些情況下,我只需要在另一個線程完成時啓動一個線程。其他完成時啓動線程
只需使用線程的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")
您需要加入線程,加入意味着等待它完成。看看文檔https://docs.python.org/2/library/threading.html – geckos
看看join方法。還有更高級別的模塊['concurrent.futures'](https://docs.python.org/3/library/concurrent.futures.html),它將允許您避免使用線程等低級組件。 –