我有一个类正在调用如下线程。
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在退出程序之前不会等待它完成。一旦主线程执行完代码,守护进程线程就会被终止,程序就会退出。
有两种方法可以解决这个问题:
- 删除
thread.daemon = True
赋值,以便python等待线程退出 - 通过调用
thread.join()
显式地等待线程完成