美文网首页
消息队列:Queue 常见用法

消息队列:Queue 常见用法

作者: dex0423 | 来源:发表于2020-08-02 22:51 被阅读0次

    1. Queue 简介

    • Queue 对象实现一个 fifo 队列(其他的还有 lifo、priority 队列,这里不再介绍);
    • Queue 只有 maxsize 一个构造参数,用来指定队列容量,指定为0的时候代表容量无限;
    • Queue 底层队列使用管道和锁定实现,另外还需要运行支持线程以便队列中的数据传输到底层管道中。

    2. Queue 常用方法

    • Queue([maxsize])
      -- 创建共享的进程队列;
      -- maxsize 是队列中允许的最大项数,0 表示无限;
      -- 如果省略此参数,则无大小限制。
    q = Queue(maxsize=0)   #指定队列大小,0表示无限
    
    • q.get( [ block [ ,timeout ] ] )
      -- 返回 q 中的一个项目;
      -- 如果 q 为空,此方法将阻塞,直到队列中有项目可用为止;
      -- block 用于控制阻塞行为,默认为 True;
      -- 如果 block 设置为 False,将引发 Queue.Empty 异常(定义在 Queue 模块中);
      -- timeout 是可选超时时间,用在阻塞模式中;
      -- 如果在制定的时间间隔内没有项目变为可用,将引发 Queue.Empty 异常;

    • q.qsize()
      -- 返回队列中目前项目的数量;
      -- 此函数的结果并不可靠,因为在返回结果和在稍后程序中使用结果之间,队列中可能添加或删除了项目;
      -- 在某些系统上,此方法可能引发 NotImplementedError 异常;

    • q.put(item [, block [,timeout ] ] )
      -- 将 item 放入队列;
      -- 如果队列已满,此方法将阻塞至有空间可用为止;
      -- block 控制阻塞行为,默认为 True;
      -- 如果 block 设置为 False,将引发 Queue.Empty 异常(定义在 Queue 库模块中);
      -- timeout 指定在阻塞模式中等待可用空间的时间长短,超时后将引发Queue.Full异常;

    • q.empty()
      -- 判断队列是否为空;
      -- 如果调用此方法时 q 为空,返回 True;
      -- 如果其他进程或线程正在往队列中添加项目,结果是不可靠的;
      -- 也就是说,在返回和使用结果之间,队列中可能已经加入新的项目;

    • q.full()
      -- 判断当前队列是否满了;
      -- 如果调用此方法时 q 已满,返回True;
      -- 如果其他进程或线程正在往队列中添加项目,结果是不可靠的;
      -- 也就是说,在返回和使用结果之间,队列中可能已经加入新的项目;

    • q.task_done()
      -- 接受消息的线程调用该函数,来说明消息对应的任务是否已经完成;

    • q.join()
      -- 等待队列为空,再执行别的操作;

    • q.get_nowait( )
      -- 同q.get(False)方法。

    相关文章

      网友评论

          本文标题:消息队列:Queue 常见用法

          本文链接:https://www.haomeiwen.com/subject/osdprktx.html