如何从内部关闭线程?
每当有客户端连接到我的服务器时,我就会创建一个新的线程,像这样:
# Create a new client
c = Client(self.server.accept(), globQueue[globQueueIndex], globQueueIndex, serverQueue )
# Start it
c.start()
# And thread it
self.threads.append(c)
现在,我知道我可以用这段代码关闭所有的线程:
# Loop through all the threads and close (join) them
for c in self.threads:
c.join()
但是,我该如何在这个线程内部关闭它自己呢?
4 个回答
30
虽然有点晚了,但我用一个叫 _is_running
的变量来告诉线程什么时候该关闭。这种方法很简单,只需要在你的线程类里面实现一个 stop() 方法。
def stop(self):
self._is_running = False
然后在 run()
方法里,只需要用 while(self._is_running)
来循环就可以了。
35
关于来自 sys
模块的 sys.exit()
,你觉得怎么样?
如果在一个线程中执行 sys.exit()
,它只会关闭那个线程。
这里有个回答讨论了这个问题:为什么在 Python 中在线程内调用 sys.exit() 不会退出?
82
当你启动一个线程时,它会开始执行你给它的一个函数(如果你在扩展 threading.Thread
,那么这个函数就是 run()
)。要结束这个线程,只需要从那个函数中返回就可以了。
根据 这个链接,你还可以调用 thread.exit()
,这会抛出一个异常,让线程悄悄结束。