线程是轻量级进程,一个标准的线程有线程id,当前指令,寄存器集合和堆栈组成,线程是进程的实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有在运行中必不可少的资源,但它可以与同属有一个进程的其他线程共享进程所拥有的全部资源。
使用方法:使用threading模块创建线程
#coding=utf-8 import threading import time def saySorry(): print("大家好!") time.sleep(1) if __name__ == "__main__": for i in range(5): t = threading.Thread(target=saySorry) t.start() #启动线程,即让线程开始执行
多线程并发操作,当调用start()方法后才真正创建线程并执行,每一个线程都有一个唯一的标识符用来区分程序的主次关系,程序主入口被称为主线程,使用threading.Thread()创建的都是子线程,线程数量等于:主线程+子线程数
主线程默认会等待所有子线程结束后再结束
len(threading.enumerate()) 查看线程数量
同时开启几个线程,是没有执行顺序的
t1 = threading.Thread(target=)
t1.setDaemon(True) 设置守护线程
多线程共享全局变量,如果多个线程同时更改同一个全局变量,会造成错误的结果,需要通过t1.join() 让其他线程等待t1线程执行结束再执行,也就相当于没有并发而是并行
互斥锁
murtes = threading.Lock() 使用Lock模块创建线程锁对象
mutes.acquire 锁定同一个进程下不同线程的共享资源,其他线程不能更改此资源
mutes.release() 释放锁
确保了某段关键代码只能由一个线程从头到尾完整地执行
死锁
在线程共享多个资源 时,如果两个线程分别占有一部分资源并同时等待对方的资源,就会造成死锁。