Python 为啥不建议使用 thread模块?

概述

Python 提供了多个模块来支持多线程编程,包括 thread、threading和 Queue 模块等。程序是可以使用 thread 和 threading 模块来创建于管理线程。thread 模块提供了基本的线程和锁定支持;而 threading 模块提供了更高级别、功能更全面的线程管理。使用 Queue 模块,用户可以创建一个队列数据结构,用于在多线程之间进行共享。

避免使用 thread

为啥 Python 推荐使用更高级别的 threading 来创建线程而不推荐使用 thread 来创建呢,主要原因有以下几点:

  • 1.threading 模块更加先进,有更好的线程支持,并且 thread模块中的一些属性会和 threading 模块有冲突。
  • 2.低级别的 thread 模块拥有的同步原语很少(实际上只有一个),而 threading 模块则有很多。
  • 3.thread 模块对于进行何时退出没有控制。当主线程结束时,所有其他线程也都强制结束,不会发出警告或者进行适当的清理。如前所述,至少 threading 模块能确保重要的子线程在进行退出前结束。
  • 4.一个很重要的原因是 thread 不支持守护线程的概念。当主线程退出时,所有子线程都将终止,不管它们是否仍在工作。如果你不希望发生这种行为,就需要引入守护线程的概念了。

守护线程
threading 支持守护线程,其工作方式是:守护线程一般是一个等待客户端请求服务的服务器。如果没有客户端请求,守护线程是空闲的。如果把一个线程设置为守护线程,就表示这个线程是不重要的,进程退出时不需要等待这个线程执行完成。

如果主线程准备退出时,不需要等待某些子线程完成,就可以为这些子线程设置守护线程标记。该标记为真时,表示该线程不重要,或者说该线程只是用来等待客户端请求而不做任何其他事情。
要将一个线程设置为守护线程,需要在启动线程之前执行如下赋值语句:thread.daemon = True,要检查线程是否为守护状态,只需要检查这个值即可。

Python 为了强调避免使用 thread 模块,在 Python3 中该模块被重命名为_thread,所以在创建的任何多线程应用都应该使用 threading 模块或其他更高级别的模块。

发布了250 篇原创文章 · 获赞 453 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/luoyayun361/article/details/102946687