2017-09-22 14 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

結合方法を見てください。スレッドのような低レベルコンポーネントの使用を避けることができる高水準モジュール['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") 

concurrent.futuresと呼ばれるのpythonからの新しい(っぽい)機能が3.2+もあります。それらを使用すると、スレッドなどの低レベルのエンティティに頼らなくても、他のスレッド(またはプロセス)の関数を実行して実行を管理することができます。その一例を以下に示します。

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") 
関連する問題