私は長いプログラムにスレッドがたくさんあります。私は問題の内容を正確に見ることができるサンプルの短いコードを作成しました。Pythonのメインスレッド
from threading import Thread, active_count
import time
def func(x):
time.sleep(x)
print(active_count())
print(active_count())
t = Thread(target=func, name="thread", args=(5,))
t.start()
print("main thread finished")
簡単に言えば - 最後のprint文が実行された後でもメインスレッドがまだアクティブな理由はわかりません。
- Iは、第一の印刷ステートメントは、番号1印刷
- 関数funcを定義 - アクティブなスレッドの数。スレッドtがまだ起動されていないので、番号1が正しい(メインスレッドのみ)
- スレッドtを定義して実行しました。
- スレッドtが眠っている間、メインスレッドが最後のprint文を終え、スレッドtが覚醒し、現在アクティブなスレッドの数を表示します しかし
- を完了する必要があり - そして数は2である - 両方のメインスレッドとスレッドtは、メインスレッドが既に終了しているはずなので、(最後のprint文)がすでに印刷されているので、(Pythonによると)アクティブになります。
メインスレッドの背後にあるメカニズムと他のスレッドとのメカニズムは何ですか?ありがとう
nopeでは、メインスレッドは、joinを使用していなくても、すべてのスレッドが終了するのを待ちます。 –