day32 通道 数据共享 进程池

1、管道

格式:

conn1,conn2 = Pipe()

 

管道的两端可以进行全双工通信   如图

 

进程2创建了管道,它就拥有管道两端的信息,每个端点都能收发信息,它把端点信息传给进程1和进程3 ,它们之间就能实现相互通信了

只要有通道两个端点的信息就可以实现两个进程之间的通信(前提是这两个进程拥有的端点信息不是同一个端点,同一个端点是不能在两个进程之间进行收和发的,会报错)

 

2、数据共享

格式:

m = Manager()

dic = m.dict( { "num" : 2 } )

数据共享会有数据安全的问题,使用的时候一般要加锁

 

3、进程池

格式:

pool =Pool(4)  #开的进程数一般是电脑的核心数,几核就来几个

 

pool.map(task,iterable)   #异步提交任务,字典close+join的效果

res = pool.apply(task,args=(,))   #同步提交任务,可以直接返回值

res = pool.apply_async(task,args =(,))    #异步提交任务 ,返回的是一个对象,用get()方法可以从返回对象中取值,使用get()时有阻塞效果,不受到值不往下执行

如果要等异步进程结束可以用pool.close() 和 pool.join() ,close表示的是锁住进程池,不让再往里加任务 

 

#回调函数

进程池异步方法才有的功能

pool.apply_async(task,args=(,),callback =fun)

回调函数在父进程执行,所以才叫回调嘛,子进程回父进程调函数

 

posted @ 2018-11-29 22:28  南辕北辙的天空  阅读(101)  评论(0编辑  收藏  举报