1 线程threading
1.1 基本概述
也被称为轻量级的进程。
线程是计算机多任务编程的一种方式,可以使用计算机的多核资源。
线程死应用程序中工作的最小单元
1.2 线程特点
(1)进程的创建开销较大,线程创建开销较小
(2)一个进程中可以包含多个线程
(3)线程依附于进程的存在,多个线程共享进程的资源
(4)每个线程也拥有自己独特的特征,比如ID、指令集
注意:
(1)进程有独立的空间,数据安全性较高
(2)线程使用进程的资源,即一般使用全局变量的方式进行线程间通信,所以需要较复杂的同步互斥
(3)多个不相关的线程功能最好不要凑到一起形成线程
2 线程模块
Thread module emulating a subset of Java‘s threading model
2.1 线程模块之类
Thread,Event, Lock, Rlock, Condition, [Bounded]Semaphore, Timer, local。
2.2 线程模块之方法
threading.currentThread(): 返回当前的线程变量。
threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
2.3 线程模块之常量
threading.TIMEOUT_MAX 设置threading全局超时时间。
3 Thread类
3.1 Thread类创建方法
class Thread(builtins.object)的Methods defined here:
Thread(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)
group:线程组,目前没有实现,为了将来实现ThreadGroup类的扩展而设置的。
target:要执行的方法,run()方法调用的对象
name:线程名,在默认情况下,命名为Thread-N(N为最小的十进制数字)
args:元组参数
kwargs:字典参数
3.2 Thread类的实例方法:
start():启动线程
join(self, timeout=None):等待线程结束,阻塞线程直到调用此方法的线程终止或到达指定的的timeout
is_alive():返回线程是否在运行,运行返回True;
isAlive:等价于is_alive()
getName():获取线程名字
setName():设置线程名字,在threading.Thread()的帮助文档中没有该方法,其他资料上有。
is/setDaemon(bool): 获取/设置是后台线程(默认前台线程(False))。(在start之前设置)
如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,主线程和后台线程均停止
如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止
3.3