程序立即终止,忽略守护进程线程中的time.sleep()



我有一个类正在调用如下线程。

import threading
import time
class ThreadingExample:
def __init__(self):
thread = threading.Thread(target=self.run, args=())
thread.daemon = True                           
thread.start()                                 
def run(self):
# Do something
print('Doing something important in the background')
time.sleep(100)
# a print statement will not be executed here even with flush=True
example = ThreadingExample()

但是,sleep不起作用。该线程是在run((中的第一个print被打印之后执行的,但是程序在print语句之后立即终止。

出于测试目的,我在睡眠(100(后插入了另一个打印语句,但该语句也不打印。这里有什么问题?

此代码应完整且可复制

问题是这一行:

thread.daemon = True

来自线程文档:

线程可以标记为"守护进程线程"。这一点的意义标志是整个Python程序在只有后台进程线程时退出剩下的。

因为您已经将线程设置为守护进程线程,所以python在退出程序之前不会等待它完成。一旦主线程执行完代码,守护进程线程就会被终止,程序就会退出。

有两种方法可以解决这个问题:

  1. 删除thread.daemon = True赋值,以便python等待线程退出
  2. 通过调用thread.join()显式地等待线程完成

最新更新