-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")
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")
スレッドに参加する必要があります。参加が完了するのを待っています。ドキュメントをチェックするhttps://docs.python.org/2/library/threading.html – geckos
結合方法を見てください。スレッドのような低レベルコンポーネントの使用を避けることができる高水準モジュール['concurrent.futures'](https://docs.python.org/3/library/concurrent.futures.html)もあります。 –