Python中完全终止死线程

Python中完全终止死线程,python,multithreading,Python,Multithreading,我知道这是一个涉及面很广的话题,所以我将对已有的答案进行补充 我有一个线程,它的run()方法中有一个无限循环。我正在实现,其中有一个stop()函数添加到扩展的threading.Thread类中 考虑以下线程结构: class StoppableThread(threading.Thread): def __init__(self, *args, **kwargs): super(LogicThread, self).__init__(*args, **kwargs

我知道这是一个涉及面很广的话题,所以我将对已有的答案进行补充

我有一个线程,它的
run()
方法中有一个无限循环。我正在实现,其中有一个
stop()
函数添加到扩展的
threading.Thread
类中

考虑以下线程结构:

class StoppableThread(threading.Thread):

    def __init__(self, *args, **kwargs):
        super(LogicThread, self).__init__(*args, **kwargs)
        self._stop_flag = threading.Event()

    def run(self):
        while True:
            if self.stopped():
                break;
            # Program logic goes here

    def stop(self):
        self._stop_flag.set()

    def stopped(self):
        return self._stop_flag.isSet()
这似乎和预期的一样有效。鉴于调用
A.isAlive(),线程似乎开始和停止在终止
catch
块中返回
false

但该计划并未退出。它停止执行线程(我将
print
语句放在run方法中,因此我可以告诉线程
run()
方法已退出),但程序不会终止。我还尝试设置
thread.daemon=True
,但没有效果。在我看来,故障保护应该是
sys.exit()
,但这也不起作用

考虑主要方法:

import sys

if __name__ == '__main__':
    try:

        logging.info('Starting!')

        A = StoppableThread()
        A.start()

        while True:
            time.sleep(100);

    except KeyboardInterrupt:
        logging.critical('Program terminating!')
        A.stop()
        A.join()
        logging.critical('Program exited!')
        sys.exit()

如果您能给我一些建议,帮助我解决这个问题,我们将不胜感激。谢谢大家!

如果self.stopped()
检查,执行是否实际到达
?它可能会卡在
#程序逻辑在这里
,永远无法到达终止检查。感谢您的评论!出于测试目的,该逻辑只是一个
print()
语句。我知道它到达这个检查点不仅是因为线程停止打印,还因为
A.isAlive()
catch
块中返回
false
。如何确定程序是否已退出?你能提供一个最小的可运行版本的代码,在你运行它的时候演示这个问题吗?你运行的是什么平台/版本的Python?在运行Python2.7.6的Linux机器上运行程序,然后使用Ctrl+C为我正确退出程序。在修复一些错误(缺少
线程导入
时间
日志记录
,super()中的类名错误)后,它在Python3.4中对我来说工作正常。