Python:进程间的通信,进程的操作队列
进程间的队列:
队列的基本操作:
入队:将数据放到队列尾部
出队:从队列的头部取出一个元素
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,random list=[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: break if __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,random list=[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: break if __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')