美文网首页
消息队列: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