进程之间的通讯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)
"""

 

posted @ 2018-03-22 14:34  Bob__Zhang  阅读(249)  评论(0编辑  收藏  举报