线程:threading提供线程相关的操做。线程是应用程序工做的作小单位,它包含在进程中,是进程中的实际运行单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中能够并发多个线程,每一个线程并执行不一样的任务。程序员
threading模块创建在-thread之上,thread以低级的最原始的方式来处理控制线程,而threading模块经过对-thread二次封装,提供了更方便的api来处理线程。api
线程锁:咱们使用线程对数据进行操做的时候,若是多个线程同时修改某个数据的时候,可能会出现多个不一样的预料结果,为了保证数据的准确性,引入了锁的概念。多线程
threading.Rlock与threading.Lock的区别:并发
Rlock容许在同一线程中被屡次acquire。而Lock却不容许这样,若是使用Rlock,那么acquire和release必须成对出现,即调用了n次acquire必须调用n次release才能释放所占用的锁。函数
threading.Eventui
Event是线程间通信最直接的机制之一。一个线程发送一个Event信号,则其余线程等待这个信号。用于主线程控制其它线程的执行。Event管理一个flag,这个flag能够使用set()设置成ture()或者使用clear()重置为false。线程
wait()这用于阻塞,在flag为ture以前,flag默认为false设计
threading.Condition协程
Python提供的condition对象提供了对复杂线程同步问题的支持。condition被称为条件变量,除了提供与lock相似acquire和release方法外,还提供了wait和notify方法。线程首先acquire一个条件变量,而后判断一些条件。对象
若是条件不知足则wait,若是条件知足进行一些处理改变条件后,经过notify方法通知其它线程,其它处于wait状态的线程接到通知后会从新判断条件,不断的重复这一过程,从而解决复杂的同步问题。
在典型的设计风格里,利用condition变量锁去访问一些共享状态,线程在获取到它想获得的状态前,会反复调用wait()。修改状态的线程在他们状态改变时调用notify()活notify-all(),用这种方式,线程会尽量的获
取到想要的一个等待者的状态。
数据共享:不一样进程之间是不能数据共享的,想要共享用如下方法
当建立进程时,共享数据会被拿到子进程去,当进程中执行完毕后,再赋值给原值。
进程池
协程:协程又叫微线程,从技术的角度来说,“协程就是你能够暂停执行的函数”,能够把它理解成像生成器同样。线程和进程的操做是由程序触发系统接口,最后的执行者是系统,协程的操做则是程序员。
协程存在的意义:对于多线程应用,CPU经过切片的方式来切换线程间的执行,线程切换须要耗时(保存状态,下次继续)。协程只须要一个线程,在一个线程中规定某个代码块执行顺序。
协程的适应场景:当程序中存在大量不须要的CPU操做时,适应于协程。