Abamert 在我准备的答案上击败了我,除了这个细节:
当且仅当外部函数通过 Python 解释器执行时,即使您无法更改它(例如,从已编译的模块),您也可以使用其他问题中描述的技术来杀死使用异常调用该函数的线程。
有什么方法可以杀死 Python 中的线程吗?
当然,如果您确实可以控制所调用的函数,则该答案中的 StoppableThread 类对此非常有效:
import threading
class StoppableThread(threading.Thread):
"""Thread class with a stop() method. The thread itself has to check
regularly for the stopped() condition."""
def __init__(self):
super(StoppableThread, self).__init__()
self._stop = threading.Event()
def stop(self):
self._stop.set()
def stopped(self):
return self._stop.isSet()
class Magical_Attack(StoppableThread):
def __init__(self, enval):
self._energy = enval
super(Magical_Attack, self).__init__()
def run(self):
while True and not self.stopped():
print self._energy
if __name__ == "__main__":
a = Magical_Attack(5)
a.start()
a.join(5.0)
a.stop()