如何在python中安全地停止正在运行的线程

时间:2019-01-25 11:23:42

标签: python

我想从类外部停止正在运行的线程,这是可能的

例如,我有那个广播线程:

class BroadcastThread(Thread):
    def __init__(self, converter, websocket_server):
        super(BroadcastThread, self).__init__()
        self.converter = converter
        self.websocket_server = websocket_server
        self.bRun = False
    def run(self):
        try:
            while self.bRun:
                print(self.bRun)
                buf = self.converter.stdout.read1(32768)
                if buf:
                    self.websocket_server.manager.broadcast(buf, binary=True)
                elif self.converter.poll() is not None:
                    break
        finally:
            self.converter.stdout.close()

我在另一个班级中将其使用如下

self.broadcast_thread = BroadcastThread(self.output.converter, websocket_server)

我需要使用以下方法启动和停止它

 def start_broadcast_stream(self):
     self.broadcast_thread.bRun = True 


 def stop_broadcast_stream(self):
     self.broadcast_thread.bRun = False

使用功能start_broadcast和stop根本不会更新变量bRun

1 个答案:

答案 0 :(得分:0)

这是python中的常用方法,应该可以工作,但是只有在while的条件被评估时,它才有机会停止。您必须确保循环内部不会阻塞,或者需要很长时间才能运行。

如果要能够在循环内取消,则需要将内容切得更薄(例如,读取数据的1/10的10倍),并插入对bRun条件的多次检查,并检查它们之间是否有断点。不漂亮...

编辑:为了增加安全性,bRun可以是Threading.Event,但在这种简单情况下我看不到问题。