進程間通信-Queue
隊列:先進先出
棧:先進后出含末,后進先出
理解:直上直下電梯相當于棧募疮,斜坡電梯相當于隊列
隊列可以存儲任何數(shù)據(jù)類型
進程通信
from multiprocessing import Queue
線程通信
from queue import Queue
Queue隊列的操作
from multiprocessing import Queue
#設(shè)置隊列放入幾個數(shù)據(jù)
q = Queue(3)
#查看隊列的數(shù)據(jù)的數(shù)量
q.qsize()
#添加數(shù)據(jù)(1)
# 添加超出3條堵塞涣易,超出添加不成功
q.put("哈哈")
#添加數(shù)據(jù)(2)
# 添加超出數(shù)據(jù)蚯嫌,會報錯
q.put_nowait("哈哈")
#取出數(shù)據(jù)(1)
# 取出超出存的數(shù)據(jù)贬蛙,會堵塞
q.get()
#取出數(shù)據(jù)(2)
# 取出超出存的數(shù)據(jù)长搀,會報錯
q.get_nowait()
#判斷隊列是否為空,True為空逼侦,F(xiàn)alse為假
q.empty()
#判斷隊列是否滿匿辩?True滿,F(xiàn)alse不滿
q.full
進程中通信傳參數(shù)
#在父進程中創(chuàng)建兩個子進程榛丢,一個往Queue里寫數(shù)據(jù)铲球,一個從Queue里讀數(shù)據(jù)
from multiprocessing import Process,Queue
import os
def write(q):
for value in ["a","b","c"]:
print("put %s to queue--%s"%(value,os.getpid()))
q.put(value)
def read(q):
while True:
if not q.empty():
value = q.get()
print("get %s from Queue--%s"%(value,os.getpid()))
else:
print("沒有數(shù)據(jù)")
break
if __name__ == '__main__':
#在父進程里面創(chuàng)建隊列
#這個隊列的大小是無限
q = Queue()
#創(chuàng)建兩個進程,pw進程負責寫入數(shù)據(jù)晰赞,pr進程負責讀取數(shù)據(jù)
pw = Process(target=write,args=(q,))
pr = Process(target=read,args=(q,))
pw.start()
pr.start()
#主進程等子進程結(jié)束在結(jié)束
pw.join()
pr.join()