gpt4 book ai didi

python - 有没有一种规范的方式来终止 python 中的线程?

转载 作者:行者123 更新时间:2023-11-28 18:51:35 25 4
gpt4 key购买 nike

我想在 python 中强制终止线程:我不想设置一个事件并等待线程检查它并退出。我正在寻找像 kill -9 这样的简单解决方案。如果不使用私有(private)方法等肮脏的技巧,是否可以做到这一点?

最佳答案

如果您不介意您的代码运行速度慢十倍左右,您可以使用下面实现的Thread2 类。下面的示例显示调用新的 stop 方法应该如何在下一个字节码指令处终止线程。

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()

Thread3 类运行代码的速度似乎比 Thread2 类快大约 33%。

关于python - 有没有一种规范的方式来终止 python 中的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12222349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com