import threading
import time
def fun():
for i in range(3):
print("fun : %d"%i)
print("[fun]",threading.active_count(), len(threading.enumerate()), threading.enumerate())
time.sleep(1)
th1 = threading.Thread(target=fun)
th1.setDaemon(False)
th1.start()
for i in range(3):
print("main : %d"%i)
print("[main]",threading.active_count(), len(threading.enumerate()), threading.enumerate())
time.sleep(0.5)
# th1.setDaemon(True) 时
fun : 0
main : 0
[fun] 2 2 [<_MainThread(MainThread, started 8607211008)>, <Thread(Thread-1, started daemon 12945776640)>]
[main] 2 2 [<_MainThread(MainThread, started 8607211008)>, <Thread(Thread-1, started daemon 12945776640)>]
main : 1
[main] 2 2 [<_MainThread(MainThread, started 8607211008)>, <Thread(Thread-1, started daemon 12945776640)>]
fun : 1
[fun] 2 2 [<_MainThread(MainThread, started 8607211008)>, <Thread(Thread-1, started daemon 12945776640)>]
main : 2
[main] 2 2 [<_MainThread(MainThread, started 8607211008)>, <Thread(Thread-1, started daemon 12945776640)>]:
# th1.setDaemon(False) 时
fun : 0
main : 0
[fun] 2 2 [<_MainThread(MainThread, started 8636325376)>, <Thread(Thread-1, started 13005135872)>]
[main] 2 2 [<_MainThread(MainThread, started 8636325376)>, <Thread(Thread-1, started 13005135872)>]
main : 1
[main] 2 2 [<_MainThread(MainThread, started 8636325376)>, <Thread(Thread-1, started 13005135872)>]
fun : 1
[fun] 2 2 [<_MainThread(MainThread, started 8636325376)>, <Thread(Thread-1, started 13005135872)>]
main : 2
[main] 2 2 [<_MainThread(MainThread, started 8636325376)>, <Thread(Thread-1, started 13005135872)>]
fun : 2
[fun] 2 2 [<_MainThread(MainThread, stopped 8636325376)>, <Thread(Thread-1, started 13005135872)>]
结论:
1、th1.setDaemon(True)时,main结束,fun线束
2、th1.setDaemon(False)时,fun没有随着主线程退出,fun全部执行完才退出
3、th1.setDaemon(False)时,threading.active_count()=2, 但 main的状态是“.... stopped 8636325376)>....” stoped和active分别啥意思,没想明白...
--
修改:jlsthsdqyx FROM 111.197.116.*
FROM 111.197.116.*