32 管道 事件 信号量 进程池 线程的创建

 

今日内容

 

管道:了解  

事件:了解

信号量:了解

进程池:(重点)

 

线程理论 (知道什么是线程,为什么要有线程)

线程的两种创建方式(重点)

 

 

今日内容回顾:

 

管道:

Conn1,conn2 = Pipe()

Conn1.recv()

Conn1.send()

数据接收一次就没有了

事件:

E = Event()  #初识状态是false

 

E.wait()  当事件对象e的状态为false的时候,在wait的地方会阻塞程序,当对象状态为true的时候,直接在这个wait地方继续往下执行

E.set()  将事件对象的状态改为true,

 

E.is_set() 查看状态

E.clear()  将事件对象的状态改为false

 

信号量:

S = semphore(4),内部维护了一个计数器,acquire-1,release+1,为0的时候,其他的进程都要在acquire之前等待

S.acquire()

需要锁住的代码

S.release()

 

进程池(*****)

进程的创建和销毁是很有消耗的,影响代码执行效率

进程池:

Map:异步提交任务,并且传参需要可迭代类型的数据,自带close和join功能

Res = Apply(f1,args=(i,))  #同步执行任务,必须等任务执行结束才能给进程池提交下一个任务,可以直接拿到返回结果res

 

Res_obj = Apply_async(f1,args=(i,))  #异步提交任务,可以直接拿到结果对象,从结果对象里面拿结果,要用get方法,get方法会阻塞程序,没有拿到结果会一直等待

 

Close : 锁住进程池,防止有其他的新的任务在提交给进程池

Join : 等待着进程池将自己里面的任务都执行完

 

回调函数:

 Apply_async(f1,args=(i,),callback=function)  #将前面f1这个任务的返回结果作为参数传给callback指定的那个function函数

01 管道

02 事件

03 基于事件的进程通信

04 信号量

05 进程池map方法

06 测试多进程的时间

07 进程池的同步方法和异步方法

08 进程池同步方法

09 进程池的异步方法

10 进程池的回调函数

原文地址:https://www.cnblogs.com/work14/p/10267021.html