进程之间的通讯Queue简单应用
#进程间通讯--Queue #Process有时需要通信的,操作系统提供了很多机制来实现进程之间的通讯 #而Queue就是其中一个 #1.Queue的使用 #可以使用multiprocessing模块下的Queue实现多进程之间的数据传递, #Queue本身就是一个消息队列 from multiprocessing import Queue #每个进程都可以和消息队列对话和拿东西(读取信息) if __name__ == "__main__": #有三个空间 可以循环使用 #初始化一个Queue对象,最多可以读取三条消息 #一个进程可以放多条消息到Queue中 #-1或者不写 表示消息队列无穷大 q = Queue(3) #放消息 q.put('消息1') q.put('消息2') #判断消息队列是否已满 print(q.full()) # q.put('消息3') print(q.full()) if q.full():#满了 True 未满false print('消息队列已经满了,不要再放了') else: q.put('消息N') # 如果消息队列已经满了,我还接着put,会发生什么? # 消息4在外面等着 阻塞 #如果已经满了 默认后面是阻塞的 # q.put('消息4')#q.put("消息4",True,None) try: q.put('消息4',False)#不阻塞 报错 except: print('消息队列已满,现在消息数量:%d'%q.qsize()) try: #阻塞两秒 q.put('消息4',True,2) except: print('消息队列已满,现在消息数量:%d'%q.qsize()) # try: # q.put('消息4', True)#一直等 # except: # print('消息队列已满,现在消息数量:%d' % q.qsize()) #实战代码 if not q.full(): # q.put('消息内容',False) q.put_nowait('消息内容')
from multiprocessing import Queue # 获取消息 q1 = Queue(3) q1.put('A') q1.put('B') q1.put('C') print(q1.get()) print(q1.get()) print(q1.get()) #如果不知道里面有多少消息数量 可以用下面的方法全部拿出消息 # count = q1.qsize() # if not q1.empty(): # for i in range(count): # # 队列的特点是:先进先出--first in first out # # print(q1.get()) # print(q1.get_nowait()) print('over!') """ 说明: 1.初始化Queue对象时(例如: q = Queue()), 或者括号中没有指定的最大可接收的消息数量,或数量为负值, 那么就表示可接收消息数量没有上线,(直到内存尽头) 2.常用函数 (1)q.qsize() 返回当前队列包含的消息数量 (2)q.full() 表示当前队列是否已经满了 True -满了 False -未满 (3)q.empty()表示当前队列是否为空,True--空,False--未空 --脾气温和类型的,有耐心的 (4)q.put(消息,block=True,timeout=None) (5)q.get(block=True,timeout=None) block(默认True)--阻塞(停在put状态),直接put进去为止 timeout(默认None)--一直等,如果设置timeout,则会等待N秒,然后强制put --脾气暴躁类型,砸场子的. (6)q.put_nowait()--相当于q.put(消息,False) (7)q.get_nowait()--相当于q.get(False) """