Process之間有時(shí)需要通信,操作系統(tǒng)提供了很多機(jī)制來(lái)實(shí)現(xiàn)進(jìn)程間的通信。
1. Queue的使用
可以使用multiprocessing模塊的Queue實(shí)現(xiàn)多進(jìn)程之間的數(shù)據(jù)傳遞,Queue本身是一個(gè)消息列隊(duì)程序,首先用一個(gè)小實(shí)例來(lái)演示一下Queue的工作原理:
import multiprocessing q = multiprocessing.Queue(3) # 初始化的Queue對(duì)象,最多能put三條消息 q.put("消息1") q.put("消息2") print(q.full()) q.put("消息3") print(q.full()) # 因?yàn)橄⒘嘘?duì)已滿(mǎn)下面的try都會(huì)拋出異常,第一個(gè)try會(huì)等待2秒后再拋出異常,第二個(gè)Try會(huì)立刻拋出異常 try: q.put("消息4", True, 2) except: print("消息已滿(mǎn),現(xiàn)有的消息為%d" % (q.qsize())) try: q.put_nowait("消息4") except: print("消息已滿(mǎn),現(xiàn)有的消息為%d" % (q.qsize())) # 推薦的方式,先判斷消息列隊(duì)是否已滿(mǎn),再寫(xiě)入 if not q.full(): q.put_nowait("消息4") # 讀取消息時(shí),先判斷消息列隊(duì)是否為空,再讀取 if not q.empty(): for i in range(q.qsize()): print(q.get_nowait())