1. 程式人生 > >day32 通道 資料共享 程序池

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)

回撥函式在父程序執行,所以才叫回調嘛,子程序回父程序調函式