在 Python 中使用 Daemon 线程的 finally 子句
Finally clause with Daemon thread in Python
我用 Visual Studios 2019 试过这个
import threading, time
def thread_func():
try:
print('thread start')
time.sleep(4)
finally:
print('thread finish')
print('main start')
t=threading.Thread(target=thread_func,daemon=True)
t.start()
time.sleep(2)
print('main finish')
输出
main start
thread start
main finish
The documentation 声明 finally 子句总是执行,那么这是不合规还是规则的一些奇怪的例外?
在您的线程完成执行之前,您的父进程即将结束。这就是为什么它永远不会到达 "thread finish" 部分。
您可以使用 join() 告诉您的进程在终止之前等待所有线程完成执行。
import threading, time
def thread_func():
try:
print('thread start')
time.sleep(4)
finally:
print('thread finish')
print('main start')
t=threading.Thread(target=thread_func,daemon=True)
t.start()
time.sleep(2)
t.join() # Wait for threads to finish their work
print('main finish')
我用 Visual Studios 2019 试过这个
import threading, time
def thread_func():
try:
print('thread start')
time.sleep(4)
finally:
print('thread finish')
print('main start')
t=threading.Thread(target=thread_func,daemon=True)
t.start()
time.sleep(2)
print('main finish')
输出
main start
thread start
main finish
The documentation 声明 finally 子句总是执行,那么这是不合规还是规则的一些奇怪的例外?
在您的线程完成执行之前,您的父进程即将结束。这就是为什么它永远不会到达 "thread finish" 部分。
您可以使用 join() 告诉您的进程在终止之前等待所有线程完成执行。
import threading, time
def thread_func():
try:
print('thread start')
time.sleep(4)
finally:
print('thread finish')
print('main start')
t=threading.Thread(target=thread_func,daemon=True)
t.start()
time.sleep(2)
t.join() # Wait for threads to finish their work
print('main finish')