在 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')