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中对我来说工作正常。