鱼C论坛

 找回密码
 立即注册
查看: 130|回复: 1

[技术交流] 在程序停止时终止所有线程的一种方法

[复制链接]
发表于 2025-3-1 13:28:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题。

这个问题其实困扰了我很久,以前想要在程序终止时停止线程使用的是 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() 就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-3-1 13:28:46 | 显示全部楼层
在程序停止时终止所有线程,使用守护线程(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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-2 02:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表