线程的概念
线程是进程执行代码的一个分支,每个执行分支想要工作执行代码需要cpu进行调度
即:线程是cpu调度的最小单位,每个进程至少有一个线程,而这个线程被称为主线程
线程的作用
多线程可以完成多任务
多线程之间共享全局变量
Python中使用多线程
导入线程模块
from threading import Thread
线程类Thread参数说明
Thread([group[,target[,name[,args,[kwargs]]]]])
Group : 线程组,目前只能使用None
Target:执行的目标任务名
Args:以元组的方式给执行任务传参
Kwargs:以字典方式给执行任务传参
Name:线程名
获取当前线程
Threading.current_thread()
线程执行的特征:
线程执行时无序的
主线程会等待所有的子线程执行结束再结束
线程之间共享全局变量
线程之间共享全局变量数据出现错误问题(多线程操作全局变量时)
设置成为守护主线程
Threading.Thread(target=task.daemon=True)
.setDaemon(True)
互斥锁
多个线程一起去抢,抢到锁的线程先执行,没有抢到锁得线程需要等待,等待互斥锁使用完释放后,其他等待得线程再去抢这个锁
互斥锁的使用:
threading模块中定义了Lock变量,这个变量本质上是一个函数,通过调用这个函数可以获取一把互斥锁
创建锁
Mutex = threading.Lock()
上锁
Mutex.acquire()
释放锁
Mutex.release()
注意点
Acpquire和release方法之间得代码同一时刻只能有一个线程去操作
如果调用acquire方法得时候,其他线程已经使用了这个互斥锁,那么此时acquire方法会堵塞,知道这个锁释放后才会再次上锁
死锁
一直等待对方释放锁的情景就是死锁