python之多线程编程(一):基本介绍

Python提供了多个模块来支持多线程编程,包括thread,threadingQueue模块等。编写的程序可以使用thread和threading模块来创建与管理线程。

  • thread模块提供了最基本的线程和锁定机制;
  • threading模块提供了更高级的,功能更全面的线程管理。
  • Queue模块,可以创建一个队列数据结构,就是先进先出,用于实现多进程之间信息数据共享。

在学习过程中,博主推荐使用threading模块,而不是使用thread模块有很多原因。

  • 这是因为threading模块,更加先进,有更好的线程支持,并且它会和thread模块中的一些属性相冲突。

  • 另外一个原因就是thread级别低,所拥有的同步原语很少,其实只有一个,而threading模块模块有很多。

  • 还有一个很重要的原因是就是thread模块对于线程何时退出没有控制,就是说主线程结束了,其他的子线程也会随之强制结束,不会发出警告或者进行适当的处理,而在threading模块中有daemon()守护线程,将子线程设置为守护线程,那么子线程会在主线程结束时自动退出。

threading模块

下面的表格是总结一些threading模块常用的对象:

对象 描述
Thread 表示一个执行线程的对象
Lock 锁原语对象(和thread中的锁一样)
RLock 可重入锁对象,使单一线程再次获得已持有的锁(递归锁)
Condition 条件变量对象,使一个线程等待另一个线程满足特定条件,比如改变状态或某个数据值
Event 条件变量的通用版本,任意数量的线程等待某个事件的发生,在该事件发生后所有的线程将被激活
Semaphore 为线程共享的有限资源提供一个计数器,如果没有可用资源会被阻塞
BoundSemaphore 与Semaphore类似,不过它不允许超过初始值
Timer 和Thread 类似,不过他要在运行前等待一段时间
Barrier 创建一个“障碍”,必须达到 指定数量的线程之后才可以继续

Thread 类

threading模块的Thread类是主要的执行对象,它有thread模块中没有的很多函数,下面的表格列出它的属性和方法列表。

属性 描述
Thread 对象数据属性
name 线程名
ident 线程的标识符
daemon 布尔值,守护线程

下面是Thread对象方法

方法 描述
_init_(group=None,name=None,args=(),kwargs={},verbose=None,daemon=None) 实例化对象,需传入target目标函数,参数args或者kwargs
start() 开始执行该线程
run() 定义线程功能的方法(常在子类中被重写)
join(timeout=None) 直到启动的线程终止之前一直挂起:除非给出timeout 秒,否则一直阻塞
getName () 返回线程名
setName(name) 设定线程名
isAlivel/is_alive() 布尔标识,线程是否还存活
isDaemon() 如果是守护线程,则返回True;否则返回Fslse
setDaemon(daemonic) 把线程的守护标识设定为 daemonic,必须在线程start()之前调用

猜你喜欢

转载自blog.csdn.net/weixin_38819889/article/details/86492523
今日推荐