zoukankan      html  css  js  c++  java
  • queue模块笔记

    queue被称为消息队列,数据不会混乱,也可以用于复杂业务传递元素,队列是多线程的利器,其内部有锁的机制可以控制数据的统一且安全

      queue.Queue()按照先进先出原则

      queue.LifoQueue()按照后进先出原则

      queue.PriorityQueue()优先级队列,数字越小优先级越高

    import queue
    import time
    t = queue.Queue(2)#设置列队大小,如果有三条数据过来那就会等待,直到取走为止
    t.put('a')#put 放入列队,
    t.get()
    t.put('b')
    t.put('c')
    while True:
        print(t.get())#
        time.sleep(2)

    full,empty

    import queue
    t = queue.Queue(3)#不填就是无限
    t.put('a')
    print(t.empty())#问:没了吗?  如果列队中有值返回False
    t.get()
    print(t.empty())#没了,返回True
    t.put('b')
    t.put('c')
    t.put('d')
    print(t.full())#问:满了吗?   如果列队中满了返回True
    t.get()
    print(t.full())#没有满,返回false
    #如果满了使用put或者空了使用get同样会报错

    put

      block=True

    import queue
    t = queue.Queue(maxsize=3)
    t.put('a')
    t.put('b')
    t.put('c')
    t.put('d',True,3)
    #Queue.put(item, block=True, timeout=None),item元素,如果block=True且timeout=None该方法将一直等待直到有队列有空余空间
    #如果block=True且timeout=3,也就是在3秒后抛出异常

      block=False

    import queue
    t = queue.Queue(maxsize=3)
    t.put('a')
    t.put('b')
    t.put('c')
    t.put('d',False,None)#只要block=False,不管设不设时间,立马就会抛出异常

    get

      block=True

    import queue
    t = queue.Queue(maxsize=3)
    t.get(block=True,timeout=3)#报错了
    #t.get(block=True)#这样为空就等于都不写,不报错
    #默认Queue.get(block=True, timeout=None),如果设置了timeout

      block=False

    import queue
    t = queue.Queue(maxsize=3)
    t.get(block=False,timeout=3)#不管设不设时间,立即报错

    get_nowait和put_nowait

    t.get_nowait()#立即取出一个元素,t.get_nowait(item)等价于get(item,False)
    t.put_nowait('f')#立即放入一个元素,t.put_nowait(item)等价于put(item, False)

    其他

    t.task_done()#在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号
    print(t.qsize())#返回当前队列中元素个数
    t.join()#实际上意味着等到队列为空,再执行别的操作

     #以上是线程queue,如果是进程之间需要相互通信(一发一收),可以主进程的对象作为一个参数传给子进程,只是copy主进程的对象,主进程和子进程不是相互公用同一数据

    版权声明:本文原创发表于 博客园,作者为 RainBol 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

  • 相关阅读:
    Drools只执行一个规则或者执行完当前规则之后不再执行其他规则(转)
    使用redis作为缓存,数据还需要存入数据库中吗?(转)
    双亲委派
    SpringBoot整合Mybatis传参的几种方式
    Drool规则引擎详解(转)
    IDEA导出可执行的jar包
    十:SpringBoot-配置AOP切面编程,解决日志记录业务
    九:SpringBoot-整合Mybatis框架,集成分页助手插件
    七:SpringBoot-集成Redis数据库,实现缓存管理
    八:SpringBoot-集成JPA持久层框架,简化数据库操作
  • 原文地址:https://www.cnblogs.com/RainBol/p/10244761.html
Copyright © 2011-2022 走看看