Python多线程:主线程等待所有子线程结束代码

我记得曾经写过一个爬虫,使用多线程来加速下载。
主线程管理多个子线程,每个子线程下载一个网页。
起初我没有关注线程是否受到保护,结果,一个线程卡在了特定网站的反爬机制中,停止了移动。
主线程一直等待,程序挂起。
后来发现这是一个守护线程。
当主线程退出时,连等待也退出了。
赶紧改成非守护线程,手动加入,等下载完再释放主线程。
这很有趣。
线程是否受保护直接影响程序能否完成。

关闭窗口子线程的软件

是的,这就是问题所在。
Tkinter 使用 destroy,Qt5 使用标志。

tkinter很简单,子线程发送信号,主线程关闭。

Qt5 的复杂之处在于改变标志位并重写关闭事件。

记住线程安全和资源释放必须到位。

python多线程退出程序的步骤和流程详解

结论:摆脱Python多线程的关键是使用标志变量而不是强制线程终止。

导入线程并使用标志变量,例如 is_exit。

创建Thread类,检测运行时标志,循环结束。

一旦线程启动,主程序就会设置一个标志来允许线程运行和退出。

等待线程合并以确保线程安全退出。

除紧急情况外,不建议强制终止线程。

自己掂量一下。

运行Python脚本怎样暂停执行中的脚本 运行Python脚本的中断执行实用方法

这里有一个陷阱:使用 Ctrl+C 中断脚本,资源清理完全是手动的吗?别相信。
信号处理比多线程更灵活,但asyncio适合高并发。
如果with语句用得不够,文件能自动关闭吗?不要这样做。
systemd重启脚本,Linux系统必须知道的。
要跨平台使用Supervisor,不要做复杂的事情。