代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

为什么有些queue.queue的方法“不可靠”?

  •  6
  • Ram Rachum  · 技术社区  · 16 年前

    queue 来自的类 Queue 模块,有几种方法,即, qsize , empty full ,他们的文件声称他们“不可靠”。

    他们到底有什么不可靠的地方?

    我注意到了 on the Python docs 网站,以下是关于 QSIZE :

    注意,qsize()>0不能保证 后面的get()不会 块,也不会qsize()<maxsize 保证put()不会阻塞。

    我个人并不认为这种行为“不可靠”。但这是“不可靠”的意思吗?还是说这些方法有更险恶的缺陷?

    3 回复  |  直到 12 年前
        1
  •  10
  •   Alex Martelli    16 年前

    是的,这里的文档使用“不可靠”来表达这个意思:例如,在某种意义上, qsize 不告诉你“现在”有多少个条目,这个概念在多线程世界中不一定很有意义(除了在采取同步预防措施的特定点上),它告诉你“一段时间以前”有多少个条目…当您根据这些信息执行操作时,即使在下一个操作码中,队列也可能有更多的条目,或者更少,或者根本没有条目,这取决于同时执行的其他线程(如果有;-)。

        2
  •  2
  •   user9876    16 年前

    我不知道您指的是哪个队列模块,请提供链接好吗?

    不可靠的一个可能来源:通常,队列由一个线程读取,由另一个线程写入。如果您是唯一访问队列的线程,那么qsize()、empty()和full()的可靠实现是可能的。但一旦涉及到其他线程,这些方法的返回值在您测试它时可能已经过期。

        3
  •  0
  •   Community Mohan Dere    8 年前

    这是一个不可靠的案例,符合亚历克斯·马泰利的建议: JoinableQueue.empty() unreliable? What's the alternative?