繁体   English   中英

Python:为什么Queue.queue的某些方法“不可靠”?

[英]Python: Why are some of Queue.queue's method “unreliable”?

Queue模块的queue类中,有一些方法,即qsizeemptyfull ,其文档声称它们“不可靠”。

对他们究竟什么不可靠?

我注意到在Python文档网站上,关于qsize内容qsize

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

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

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

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

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

这是一个不可靠的案例,与Alex Martelli建议的一致: JoinableQueue.empty()不可靠? 有什么选择?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM