zoukankan      html  css  js  c++  java
  • Queue模块

    Python中,队列是线程间最常用的交换数据的形式。Queue模块是提供队列操作的模块。

    三个构造函数:

        1 FIFO队列先进先出:class Queue.Queue(maxsize)

        2 LIFO类似于堆,即先进后出:class Queue.LifoQueue(maxsize) 

        3 优先级队列级别越低越先出来:class Queue.PriorityQueue(maxsize)

        队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数, 默认为1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为1。如果队列为空且block为1,get()就使调用线程暂停,直至有项目可用。如果block为0,队列将引发Empty异常。join()保持阻塞状态,直到处理了队列中的所有项目为止。在将一个项目添加到该队列时,未完成的任务的总数就会增加。当使用者线程调用task_done()以表示检索了该项目、并完成了所有的工作时,那么未完成的任务的总数就会减少。当未完成的任务的总数减少到零时,join() 就会结束阻塞状态。

       队列实例分别有以下操作方法:

        Queue.qsize() 返回队列的大小  
        Queue.empty() 如果队列为空,返回True,反之False  
        Queue.full() 如果队列满了,返回True,反之False 
        Queue.full 与 maxsize 大小对应  
        Queue.get([block[, timeout]]) 获取队列,timeout等待时间  
        Queue.get_nowait() 相当Queue.get(False) 
        Queue.put(item) 写入队列,timeout等待时间  
        Queue.put_nowait(item) 相当Queue.put(item, False) 
        Queue.task_done() 在完成一项工作之后,Queue.task_done() 函数向任务已经完成的队列发送一个信号 
        Queue.join() 实际上意味着等到队列为空,再执行别的操作

     1 __author__ = 'Zechary'
     2 import Queue
     3 import time
     4 import threading
     5 
     6 q = Queue.Queue()
     7 
     8 class producter(threading.Thread):
     9     def __init__(self, i):
    10         threading.Thread.__init__(self, name='producter thread - %d' % i)
    11     def run(self):
    12         global q
    13         count = 0
    14         while True:
    15             for i in range(3):
    16                 if q.qsize() > 12:
    17                     pass
    18                 else:
    19                     count = count + 1
    20                     msg = str(count)
    21                     q.put(msg)
    22                     print self.name + ' ' + 'producter' + msg + ' ' + 'Queue size:' + str(q.qsize())
    23                 time.sleep(1)
    24 
    25 class consumer(threading.Thread):
    26     def __init__(self, i):
    27         threading.Thread.__init__(self, name='consumer thread - %d' % i )
    28     def run(self):
    29         global q
    30         while True:
    31             for i in range(3):
    32                 if q.qsize() < 1:
    33                     pass
    34                 else:
    35                     msg = q.get()
    36                     print self.name + ' ' + 'consumer' + msg + ' ' + 'Queue Size:' + str(q.qsize())
    37 
    38 def test():
    39     for i in range(10):
    40         q.put(str(i))
    41         print 'Init producter ' + str(i)
    42     for i in range(2):
    43         p = producter(i)
    44         p.start()
    45     for i in range(3):
    46         c = consumer(i)
    47         c.start()
    48 
    49 if __name__ == "__main__":
    50     test()
  • 相关阅读:
    20165309 Linux安装及学习
    20165309 技能学习经验与C语言
    20165309 我期望的师生关系
    20165317-我期望的师生关系
    20165308 学习基础和C语言基础调查
    20165308 我期望的师生关系
    20165320 结对编程学习第一周
    20165320 第七周学习总结
    20165320 第六周学习总结
    20165320 实验一 java环境的熟悉
  • 原文地址:https://www.cnblogs.com/xiaojiangdraug/p/4499252.html
Copyright © 2011-2022 走看看