zoukankan      html  css  js  c++  java
  • 进程之间的通讯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)
    """
  • 相关阅读:
    Blender基础操作
    反汇编及linux下edb的下载
    混淆矩阵(confusion_matrix)含义
    Python大数据第三次的作业
    Python的DataFrame基础使用
    Python数据标准化
    爬虫之xpath
    luffy项目上线
    爬虫之selenium
    celery
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/8623660.html
Copyright © 2011-2022 走看看