<p>看起来你的问题已经用kindall的建议解决了,但是如果你有兴趣从另一个线程中终止一个线程,你可能会感兴趣。在</p>
<hr/>
<p>如果您不介意代码运行速度慢十倍,可以使用下面实现的<code>Thread2</code>类。下面的一个例子展示了如何调用新的<code>stop</code>方法来杀死下一个字节码指令上的线程。在</p>
<pre><code>import threading
import sys
class StopThread(StopIteration): pass
threading.SystemExit = SystemExit, StopThread
class Thread2(threading.Thread):
def stop(self):
self.__stop = True
def _bootstrap(self):
if threading._trace_hook is not None:
raise ValueError('Cannot run thread with tracing!')
self.__stop = False
sys.settrace(self.__trace)
super()._bootstrap()
def __trace(self, frame, event, arg):
if self.__stop:
raise StopThread()
return self.__trace
class Thread3(threading.Thread):
def _bootstrap(self, stop_thread=False):
def stop():
nonlocal stop_thread
stop_thread = True
self.stop = stop
def tracer(*_):
if stop_thread:
raise StopThread()
return tracer
sys.settrace(tracer)
super()._bootstrap()
################################################################################
import time
def main():
test = Thread2(target=printer)
test.start()
time.sleep(1)
test.stop()
test.join()
def printer():
while True:
print(time.time() % 1)
time.sleep(0.1)
if __name__ == '__main__':
main()
</code></pre>
<p><code>Thread3</code>类似乎比<code>Thread2</code>类快大约33%。在</p>