如何优雅地退出python守护程序线程线程、优雅、程序、python

2023-09-04 02:11:18 作者:没死就别把自己当废物。

我有如下代码

def run():
  While True:
    doSomething()
def main():
  thread = threading.thread(target = run)
  thread.setDaemon(True)
  thread.start() 
  doSomethingElse()

如果我像上面那样编写代码,当主线程退出时,守护线程将退出,但可能仍在doSomething的进程中。

Python学习笔记 python基础 自动化安装依赖,线程,锁,守护线程,队列,线程池,进程,unittest,参数化 魔兽世界真好玩的博客 CSDN博客

Main函数将在外部调用,我不允许在主线程中使用join, 有什么方法可以使守护程序线程在主线程完成后正常退出。

推荐答案

您可以使用THREADthreading.Event通知子线程何时退出主线程。

示例:

class DemonThead(threading.Thread):

    def __init__(self):
        self.shutdown_flag = threading.Event()

    def run(self):
        while not self.shutdown_flag:
            # Run your code here
            pass

def main_thread():
    demon_thread = DemonThead()
    demon_thread.setDaemon(True) 
    demon_thread.start()
    
    # Stop your thread
    demon_thread.shutdown_flag.set()
    demon_thread.join()