活动地址:优快云21天学习挑战赛
1. 多线程简单介绍
多线程,或者说多任务,指的是操作系统同时运行多个任务。例如,听歌、洗衣服、看视频可以同时进行,这种就是多任务。
单核CPU执行多任务:操作系统轮流让各个任务交替执行,任务1执行t1时间,切换到任务2,任务2执行t2时间,再切换到任务3,执行t3时间…如此反复执行,表面上看,每个任务交替执行,但是由于CPU的执行速度很快,在人看来就好像所有任务同时执行。
这里需要注意并发和并行的概念:
- 并发,指任务数多于COU核数,通过操作系统的各种任务调度算法,实现用多个任务一起执行(实际上有一些任务没有在执行,但因为切换任务的速度相当快,看上去一起执行)。
并行,指的是任务数小于或等于CPU核数,任务是同时执行的。
threading模块介绍
python中提供了thread和threading模块对线程进行操作,其中thread模块是比较底层的模块,threading模块对thread做了一些包装,使用更方便。
2.1 threading模块常用方法
threading.active_count() 返回当前处于active状态的Thread对象的个数
threading.current_thread() 返回当前Thread对象
threading.get_ident() 返回当前线程的线程标识
threading.enumerate() 返回当前处于active状态的所有Thread对象列表
threading.main_thread() 返回主线程对象,启动python解释器的线程对象
threading.stack_size() 返回创建线程时使用的栈的大小,如果指定 size参数,则用来指定后续创建的线程使用的 栈大小,size必须是0(标识使用系统默认值) 或大于32K的正整数
注:线程标识是一个非负整数,并无特殊含义,只是用来标识线程,该整数可能会被循环利用,python3.3及以后版本支持该方法。
threading模块提供了Thread、Lock、RLock、Condition、Event、Timer和Semaphore等类支持多线程。
2.2 Thread类使用
Thread是threading提供的最重要也是最基本的类,可以通过该类创建线程并控制线程的运行。
使用Thread创建线程,有两种方式:
- 为构造函数传递一个可调用对象
- 继承Thread类并在子类中重写__init__()和run()
threading.Thread类常用的方法和属性如下
- 常用方法
方法名 说明
方法名 | 说明 |
---|---|
start() | 启动线程 |
run() | 线程代码,用来实现线程的功能和业务逻辑,可以在子类中重写该方法自定义线程的行为 |
init(self,group=None,target=None,name=None,args=(),kwargs=None,daemon=None) | 构造函数 |
is_alive() | 判断线程是否存货 |
getName() | 返回线程名 |
setName() | 设置线程名 |
isDaemon() | 判断线程是否为守护线程 |
setDaemon() | 设置线程是否为守护线程 |
常用属性
属性名 | 说明 |
---|---|
name | 读取或设置线程的名字 |
ident | 线程标识,用非0数字或None(线程未被启动) |
daemon | 标识线程是否为守护线程,默认为False |
join(timeout=None) | 当timeout=None时,会等待至线程结束;否则,会等待至timeout时间结束,单位为秒 |
未完续待…