まず、デーモンスレッド
それは、プロセスまたはスレッドであるかどうか、次のとおりです。メインの実行が破壊完了した後にガーディアンxxのxxは待機します。終了を実行し終えていない:ことが強調されます。
- メイン処理は、終了する操作が実行完了したメイン処理コードを指し
- メインスレッドは、完了したランは、すべての非デーモン・スレッドは、実行中のすべての終了プロセス内のメインスレッドを指し、メインスレッドは、最終走行であると考えられます
詳細1.1
- そのコード終了後の主なプロセスは(デーモンがこの時点で回収された)回数を実行が完了した場合、メインプロセスが常に実行が完了した子プロセスの非保護者をリサイクルした後、子プロセスを待ちます(またはゾンビプロセスが発生します)、終了します。
- スレッドが実行終了したとみなさデーモンを実行して終了した後、他の非メインスレッドに(デーモンスレッドがこの時点で回収されます)。プロセスの最後の最後には、メインスレッド、全体のプロセスがリソースを再利用され、プロセスが非デーモンスレッドの実行が終了した後に終了することが保証されなければならないことを意味しているので。
フォーカス:デーモンスレッドがデーモンスレッドが終了するまで、スレッドが終了したすべての非デーモンのためのプログラム限り、プロセスの動作サイクルの守護者であります
例1つの1.2デーモンスレッド
from threading import Thread
import time
def sayhi(name):
time.sleep(2)
print('%s say hello' %name)
if __name__ == '__main__':
t=Thread(target=sayhi,args=('nick',))
t.setDaemon(True) #必须在t.start()之前设置
t.start()
print('主线程')
print(t.is_alive())
メインスレッド
真
例2 1.3デーモンスレッド
from threading import Thread,enumerate,currentThread
import time
def task():
print('守护线程开始')
print(currentThread())
time.sleep(20)
print('守护线程结束')
def task2():
print('子线程 start')
time.sleep(5)
print(enumerate())
print('子线程 end')
if __name__ == '__main__':
t1 = Thread(target=task)
t2 = Thread(target=task2)
t1.daemon = True
t2.start()
t1.start()
print('主')
子スレッド開始
デーモンスレッドが開始
メイン
<スレッド(スレッド1は、デーモン4360スタート)>
[<_MainThread(MainThread、15104停止)>、<スレッド(スレッド2は、15160スタート)>、<スレッド(スレッド1、開始デーモン4360)>]
子スレッドの終了