zoukankan      html  css  js  c++  java
  • 同步队列-Queue模块解析

            Queue模块解决了生产者、消费者问题,在多线程编程中进行线程通信的时候尤其有用,Queue类封装了加锁解锁的过程。

            在Queue模块中有三种不同的队列类,区别是不同队列取出数据的顺序不同。在FIFO队列中,先存进去的数据最先取出来。而在LIFO队列中,最后存进去的数据最取出来。在加权队列中,权值最小的先取出来。
            Queue(maxsize=0)类
            构造一个先进先出FIFO的队列,maxsize是个整数,指定了队列中最多能够存入的数据个数,如果达到最大数目,将不能再进行插入操作,如果maxsize小于等于0,则对插入的数目没有限制。
            LifeQueue(maxsize)类
            构造一个后进先出LIFO的队列。其他跟Queue类一样。
            PriorityQueue(maxsize)类
            加权队列,权值最小的值最先取出。插入的数据格式应该为(priority_number, data)
            此外,Queue模块还定义了两个异常类。
            Empty
            当队列为空却执行get()操作时,将抛出这个异常。
            Full
            当队列满了,却执行put()操作时将抛出这个异常。
            注意:collections模块中的deque是不带加锁解锁功能的。

    Queue对象

            Queue对象定义了以下公共方法。

            qsize():返回队列的大小。

            empty():判断队列是否为空。

            full():判断队列是否满了。

            put(item[,block[,timeout]]):插入元素到队列,如果可选参数block为True,并且timeout为None(默认值),将等待队列中有空闲位置,如果timetout为一个正整数,将最多等待timeout秒,然后抛出Full异常。如果Block为False,在队列中有空余位置时直接执行插入操作,如果没有则抛出异常。

            put_nowait(item):相当于put(item,False)

            get([block[,timeout]]):从队列中取出一个元素,如果可选参数block为True,并起timeout为None,如果队列为空将等待直到队列中不为空,如果timeout为一个正整数,则只会等待最多timeout秒,然后抛出Empty异常。如果block为False,如果队列非空将直接返回元素,如果为空则抛出异常。

            get_nowait():相当于get(False)

            join():等待队列中所有的元素被取出并执行。

            task_done():当前一个从队列中取出的任务执行完毕之后,通过这个方法告诉队列操作已经执行完毕。

            例如下面的例子:

    1.  1 def worker():
       2     while True:
       3         item = q.get()
       4         do_work(item)
       5         q.task_done()
       6 
       7 q = Queue()
       8 for i in range(num_worker_threads):
       9      t = Thread(target=worker)
      10      t.daemon = True
      11      t.start()
      12 
      13 for item in source():
      14     q.put(item)
      15 
      16 q.join()       # block until all tasks are done
  • 相关阅读:
    MongoDB的C#驱动
    在C#使用MongoDB
    MongoDB 主从复制
    MongoDB 索引操作
    MongoDB 分片技术
    Mongodb 与sql 语句对照
    MongoDB命令使用示例
    MongoDB 高级操作
    MongoDB 细说增删查改
    MongoDB 运维技术
  • 原文地址:https://www.cnblogs.com/fireflow/p/4869551.html
Copyright © 2011-2022 走看看