進程間的隊列:
隊列的基本操作:
入隊:將數據放到隊列尾部
出隊:從隊列的頭部取出一個元素
maxsize:隊列中能存放數據個數的上限(整數),一旦達到上限插入會導致阻塞,直到隊列中的數據被消費掉? ? ? maxsize<=0隊列大小沒有限制
?
隊列常用方法:
Queue提供了一個基本FIFO窗口,初始化隊列對象q=Queue()
q.empty()? q為空返回True? ? ? ? ? ? ?q.get() 在隊列中取值
q.put() 在隊列中放值? ? ? ? ? ? ? ? q.ful() 隊列是不是滿了
from queue import Queue
q=Queue(3)#初始化隊列對象,最多可接受三條消息
q.put('1')
q.put('2')
print(q.full())#False
q.put('3')
print(q.full())#True
#get取出
print(q.get())
print(q.get())
print(q.get())print(q.empty())#True
print('現在的消息總量是:',q.qsize())#查看消息數量
try:q.put('4',True,2)#True是block值,消息隊列沒空間寫入時,程序進入阻塞狀態,2代表阻塞時間timeout,2s后還沒空間寫入,拋出異常
except:print('full!!現有消息數量:%s'%q.qsize())
?
from multiprocessing import Process,Queue import time,randomlist=[1,2,3,4] #寫數據進程執行的代碼 def write(q1):for i in list:print(f'將{i}放進隊列中')q1.put(i)time.sleep(random.random())#隨機生成0到1之間的浮點數#讀數據進程執行的代碼 def read(q2):while True:if not q2.empty():info=q2.get()print(f'從隊列中獲取{info}')time.sleep(random.random())else:breakif __name__=='__main__':#實例化隊列對象q=Queue()#創建進程p1=Process(target=write,args=(q,))#先寫入p2 = Process(target=read, args=(q,))#啟動p1.start()p1.join()p2.start()p2.join()輸出結果為: 將1放進隊列中 將2放進隊列中 將3放進隊列中 將4放進隊列中 從隊列中獲取1 從隊列中獲取2 從隊列中獲取3 從隊列中獲取4
進程間的通信:
from multiprocessing import Process,Queue import time,randomlist=[1,2,3,4] #在列表中寫(放)數據 def write(q):for i in list:print(f'將{i}放進隊列中')q.put(i)time.sleep(random.random())#隨機生成0到1之間的浮點數#在列表中讀(取)數據 def read(q):while True:if not q.empty():info=q.get()print(f'從隊列中獲取{info}')time.sleep(random.random())else:breakif __name__=='__main__':#創建隊列對象q=Queue()#創建進程p1=Process(target=write,args=(q,))#先寫入p2 = Process(target=read, args=(q,))#啟動p1.start()p1.join()p2.start()p2.join()print('end')