Python:为什么有些队列.Queue的方法“不可靠”?

2024-06-23 19:34:54 发布

您现在位置:Python中文网/ 问答频道 /正文

Queue模块的queue类中,有几个方法,即qsizeempty和{},它们的文档声称它们“不可靠”。在

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

我注意到了on the Python docs站点,下面是关于qsize的:

Note, qsize() > 0 doesn’t guarantee that a subsequent get() will not block, nor will qsize() < maxsize guarantee that put() will not block.

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


Tags: 模块the方法文档thatqueueonnot
3条回答

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

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

是的,文档在这里使用“unreliable”来准确地表达这一含义:例如,在某种意义上,qsize并不能告诉您“现在”有多少条,这个概念在多线程世界中并不一定非常有意义(除了在采取同步预防措施的特定点上),它告诉您有多少条有“不久前”。。。当您对这些信息采取行动时,即使是在下一个操作码中,队列也可能有更多的条目,或者更少,或者根本没有条目,这取决于在此期间其他线程的运行情况(如果有的话;-)。在

这是一个与Alex Martelli建议相符的不可靠案例: JoinableQueue.empty() unreliable? What's the alternative?

相关问题 更多 >

    热门问题