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()
  • 相关阅读:
    输入'过程'求方差算法的简单优化(免去数组的使用)
    PAT 甲级 1002 A+B for Polynomials
    常见算法时间函数的增长趋势分析
    洛谷 P4888 三去矩阵
    PAT 甲级 1001 A+B Format
    网站云服务器迁移时遇到的坑
    Angular JS中自定义标签 属性绑定的解释
    how to do a mass update in Laravel5 ( 在Laravel 5里面怎么做大量数据更新 )
    javascript 到将来某个时间(2020-5-20)的倒计时
    javascript 数字日期格式转换为中文
  • 原文地址:https://www.cnblogs.com/Security-Darren/p/4733265.html
Copyright © 2011-2022 走看看