Потоки демона уничтожаются при выходе из основного потока (см. Документы выше this ):
ForceBru:~ forcebru$ cat test.py
import threading
import time
def daemon():
print('Daemon started')
i = 0
while True:
print('Daemon running:', i)
i += 1
d = threading.Thread(target=daemon, daemon=True)
d.start()
print('Started daemon!')
time.sleep(0.01)
print('Main thread is exiting. See if the daemon thread exits too')
ForceBru:~ forcebru$ python3 test.py
Daemon started
Daemon running: 0
Daemon running: 1
Daemon running: 2
Daemon running: 3
Started daemon!
Daemon running: 4
Daemon running: 5
Daemon running: 6
Daemon running: 7
Daemon running: 8
Daemon running: 9
Daemon running: 10
Daemon running: 11
<snip>
Daemon running: 1508
Daemon running: 1509
Daemon running: 1510
Main thread is exiting. See if the daemon thread exits too
Fatal Python error: could not acquire lock for <_io.BufferedWriter name='<stdout>'> at interpreter shutdown, possibly due to daemon threads
Thread 0x0000700008819000 (most recent call first):
File "test.py", line 8 in daemon
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 865 in run
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 917 in _bootstrap_inner
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 885 in _bootstrap
Current thread 0x0000000104ea95c0 (most recent call first):
Abort trap: 6
ForceBru:~ forcebru$
Вы не обязательно получите ошибку, но все же посмотрите начто он говорит:
Fatal Python error: could not acquire lock for <_io.BufferedWriter name='<stdout>'> at interpreter shutdown, possibly due to daemon threads
Итак, Python пытался отключиться , пока поток демона все еще работал .Итак, ваш скрипт на самом деле завершается, потому что, согласно документам:
... вся программа Python выходит , когда остаются только потоки демонов