天天看点

线程、进程、协程

一、线程

第一个线程

基本使用

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