内置功能len()
(https://docs.python.org/3/library/functions.html#len https://docs.python.org/3/library/functions.html#len)返回“对象的长度(项目数)“,但这并没有实现queue.Queue
(https://docs.python.org/3/library/queue.html https://docs.python.org/3/library/queue.html)。
反而,queue.Queue
has a qsize()
当队列明显有长度时,返回队列的近似大小的方法;您可以指定a的最大长度Queue
在构造函数中。类似的collections.deque
确实与len
.
不使用通用的原因有哪些len()
for queue.Queue
?或者:如果qsize
而是被命名为__len__
以启用len()
功能?
len()
没有实现queue.Queue
因为这将是一个“有吸引力的麻烦”:只有专家才应该考虑使用它,但“友好的名称”会鼓励非专家使用它。
与大多数序列类型不同(例如list
and deque
), a queue.Queue
具体是intended用于多线程上下文(同样适用于multiprocessing
模块的队列类型)。虽然 a 中的项目数量Queue
当然在任何特定时间都有一个确定的值,用户代码不可能找出该值是什么:在调用之间.qsize()
返回并且您的代码可以look在返回值处,任意数量的其他线程(或进程,在multiprocessing
case) 可能对队列的内容进行了任意数量的更改。
所以关于返回的值唯一可以说的是.qsize()
那是Queue
had其中有那么多值some过去的时间。当您可以使用返回值时,它可能包含任意更多(或更少)的值。
当然,如果您只运行一个线程,情况就不是这样了——但是这样就没有必要为一个线程的实现复杂性付出代价了。Queue
(use a list
or a deque
反而)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)