对于连接到我的服务器的每个客户端,我都会生成一个新线程,如下所示:
# 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()
但是如何从 那个线程中关闭线程?
答案 0 :(得分:48)
当你开始一个线程时,它开始执行你给它的一个函数(如果你扩展threading.Thread
,函数将是run()
)。要结束线程,只需从该函数返回。
根据this,您还可以调用thread.exit()
,这将抛出一个异常,以便以静默方式结束线程。
答案 1 :(得分:13)
有点晚了,但是当我想关闭时,我使用_is_running
变量告诉线程。它易于使用,只需在线程类中实现stop()即可。
def stop(self):
self._is_running = False
在run()
中只需循环while(self._is_running)
答案 2 :(得分:6)
模块sys.exit()
的{{1}}怎么样?
如果从一个线程中执行sys
,它将仅关闭该线程。
这里的答案谈到:Why does sys.exit() not exit when called inside a thread in Python?
答案 3 :(得分:1)
如果你想强制停止你的线程:
thread._Thread_stop()
对我来说工作非常好。