我想从类外部停止正在运行的线程,这是可能的
例如,我有那个广播线程:
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
答案 0 :(得分:0)
这是python中的常用方法,应该可以工作,但是只有在while的条件被评估时,它才有机会停止。您必须确保循环内部不会阻塞,或者需要很长时间才能运行。
如果要能够在循环内取消,则需要将内容切得更薄(例如,读取数据的1/10的10倍),并插入对bRun条件的多次检查,并检查它们之间是否有断点。不漂亮...
编辑:为了增加安全性,bRun可以是Threading.Event,但在这种简单情况下我看不到问题。