我正在构建一个类,它有一个线程在后台执行一些工作。我希望每当类也被删除或超出范围时删除该线程。我正在使用的代码相当于这样:
from threading import Thread
from time import sleep
import sys
class Test:
def __init__ (self):
self._running_thread = False
self._thread = None
def _workFunc (self):
while self._running_thread:
print("Working...")
sleep(1)
def startThread (self):
self._running_thread = True
self._thread = Thread(target=self._workFunc)
self._thread.start()
def stopThread (self):
self._running_thread = False
self._thread.join()
def __del__ (self):
self.stopThread()
def main ():
test = Test()
test.startThread()
sleep(3)
print("Going out of scope!")
if __name__ == "__main__":
sys.exit(main())
我期望的是线程启动,工作消息打印三到四次,然后
test
对象超出范围,__del__
被调用,一旦线程完成,程序的执行就会恢复完成的。相反,发生的事情是“超出范围!”三秒后打印消息,但线程无限期地保持打印“工作”。发生了什么事,我怎样才能得到我想要的效果?
您应该使用守护线程,因为当主程序退出时它们会自动终止。这可以确保您的程序不会无限期地运行。
创建线程时,只需传递 daemon=true 作为参数即可将其指定为守护进程。
喜欢:
def startThread(self):
self._running_thread = True
self._thread = Thread(target=self._workFunc, daemon=True)
self._thread.start()
阅读更多这里