我有一个正在调用如下所示线程的类。
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语句后立即终止。
出于测试目的,我在sleep(100)之后插入了另一个打印语句,但该语句也不打印。这是什么问题?
此代码应完整且可复制
答案 0 :(得分:2)
问题是这一行:
thread.daemon = True
可以将一个线程标记为“守护程序线程”。的意义 标志是只有守护程序线程时,整个Python程序都会退出 剩下。
由于您已将线程设为守护程序线程,因此python在退出程序之前不会等待其完成。一旦主线程执行完代码,守护程序线程就会被杀死,程序退出。
有两种方法可以解决此问题:
thread.daemon = True
分配,以便python将等待您的线程退出。thread.join()
显式等待线程完成。