如何从内部关闭线程?

时间:2010-12-27 19:20:38

标签: python multithreading

对于连接到我的服务器的每个客户端,我都会生成一个新线程,如下所示:

# 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 个答案:

答案 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() 对我来说工作非常好。