一、线程
第一个线程
基本使用
Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。
更多方法:
start 线程准备就绪,等待CPU调度
setName 为线程设置名称
getName 获取线程名称
setDaemon 设置为后台线程或前台线程(默认)
如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止
如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止
join 逐个执行每个线程,执行完毕后继续往下执行,该方法使得多线程变得无意义
run 线程被cpu调度后自动执行线程对象的run方法
自定义线程
线程锁
信号量(Semaphore)
互斥锁 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去。
自定义线程池
信号量
事件(event)
python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法 set、wait、clear。
事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 event.wait 方法时就会阻塞,如果“Flag”值为True,那么event.wait 方法时便不再阻塞。
clear:将“Flag”设置为False
set:将“Flag”设置为True
Timer
定时器,指定n秒后执行某操作
生产者消费者模型(队列)
二、进程
默认数据不共享,可以使用下面的三种方法进行进程数据共享
queues
array
Manager.dict
进程池
PS:
IO密集型-多线程
计算密集型 - 多进程
三、协程
原理:利用一个线程,分解一个线程成为多个“微线程”==》程序级别
greenlet
gevent安装:
pip3 install gevent