管道:異步
Conn1,conn2 = Pipe()async
Conn1.recv()函數
Conn1.send()ui
數據接收一次就沒有了spa
事件:對象
E = Event() #初識狀態是false進程
E.wait() 當事件對象e的狀態爲false的時候,在wait的地方會阻塞程序,當對象狀態爲true的時候,直接在這個wait地方繼續往下執行事件
E.set() 將事件對象的狀態改成true,ip
E.is_set() 查看狀態get
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函數