zoukankan      html  css  js  c++  java
  • Python多线程(3)——Queue模块

      Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes)。

      Python 2 中的Queue模块在Python 3中更名为 queue。

    Queue对象的创建

      可以通过实例化Queue类型获得队列对象:

    q = Queue.Queue(maxsize=0)
    

      创建新的队列,参数 maxsize 的含义是:

    • 如果 maxsize > 0:当 q 中的元素达到 maxsize 个时,队列就满了,此时再有一个线程希望向里面插入时,如果指定了 block 选项,就会阻塞直到一个线程从里面抽出一个元素。
    • 如果 maxsize <= 0:Python会认为这是一个没有容量限制的队列。

    Queue模块定义的异常类

    Queue.Empty
    

      如果队列 q 是空的,此时又调用了 q.get(False),就会抛出该异常。

    Queue.Full
    

      如果队列q是满的,而又调用了 q.put(x, False),就会抛出该异常。

    Queue对象的方法

    q.empty()

       判断队列是否为空。

    q.full()

       判断队列是否已满。

    q.get(block=True, timeout=None)
    q.get_nowait()

      参数 block 为 False 时,参数 timeout 没有意义,因为线程不会阻塞:

    • 如果队列不为空,取走并返回该元素;
    • 如果队列为空,抛出Queue.Empty

      block 为 True 时,结合超时 timeout 判断当队列空时,是一直阻塞进程,还是进程阻塞一段时间。

      get_nowait()等于get(False),或者get(timeout=0)即不论队列空否,都不阻塞等待。

    例如:

    try:
        x = q.get_nowait()
    except Queue.Empty:
        print "no more items to process"
    

      

    q.put(item, block=True, timeout=None)
    q.put_nowait(item)

      向队列中插入 item,如果队列满了,抛出Queue.Full或线程阻塞等待。

    q.qsize()

      返回当前队列中的元素个数。

    q.join()
    q.task_done()
  • 相关阅读:
    java_oop_方法2
    POJ 3276 Face The Right Way(反转)
    POJ 3276 Face The Right Way(反转)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3061 Subsequence(尺取法)
    POJ 3061 Subsequence(尺取法)
    HDU 1222 Wolf and Rabbit(欧几里得)
  • 原文地址:https://www.cnblogs.com/Security-Darren/p/4733265.html
Copyright © 2011-2022 走看看