进程间的队列:
队列的基本操作:
入队:将数据放到队列尾部
出队:从队列的头部取出一个元素
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')