在程序停止时终止所有线程的一种方法
如题。这个问题其实困扰了我很久,以前想要在程序终止时停止线程使用的是 atexit.register(stopThreads);但这不起作用。
我试了各种方法,比如说 win32api 之类的……
但令我崩溃的是,网上搜到的(我用的 Bing)大部分居然是 AI 的内容。csdn,简书,geekdocks,到处都是 ai 的殖民地。
最接近成功的方法是定义一个变量,线程里不断检测它。但新的问题也来了……
如果线程是 socket.socket().accept / recv 这样别人写的代码呢?我怎么不断检测这个变量?
现在,我知道了:使用 DAEMON THREAD(守护线程)。
具体来说,在定义线程时指定 keyword-argument daemon 为 True,所有这样的线程都会在主线程退出时自动关闭。
我们可以简单封装一下这个功能。
class Thread(threading.Thread):
def __init__(self, target, args=(), kwargs=None):
super().__init__(target=target, args=args, kwargs=kwargs, daemon=True)
使用线程时,只需要 Thread(threadFunc, (1, 1, 4, 5, 1, 4), {'ikun': True}).start() 就行了。 在程序停止时终止所有线程,使用守护线程(Daemon Thread)是一个有效的方法。守护线程会在主程序退出时自动结束。你已经提到了一种实现方法,下面是一个更详细的说明和示例:
使用守护线程的步骤
步骤 1: 在创建线程时,将 daemon 参数设置为 True。这样,这个线程就会成为一个守护线程。
步骤 2: 主线程中退出后,所有未完成的守护线程都会自动终止。
以下是你提供的代码的封装示例:
import threading
class Thread(threading.Thread):
def __init__(self, target, args=(), kwargs=None):
super().__init__(target=target, args=args, kwargs=kwargs, daemon=True)
# 示例线程函数
def threadFunc(a, b, c):
while True:
print("Running thread with:", a, b, c)
# 使用自定义的 Thread 类
t = Thread(target=threadFunc, args=(1, 1, 4))
t.start()
# 主线程的其他工作...
print("Main thread is running")
# 主线程结束后,守护线程也会自动终止
通过这种方式,可以轻松地在程序退出时自动终止所有线程。如果你有任何其他问题,请随时问我!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]