内置函数len()
(https://docs.python.org/3/library/functions.html#len)返回“对象的长度(项目数)”,但{{ 1}}(https://docs.python.org/3/library/queue.html)。
相反,queue.Queue
有一个queue.Queue
方法,当它显然有一个长度时,它会返回队列的大致大小;您可以在构造函数中指定qsize()
的最大长度。类似的Queue
适用于collections.deque
。
对len
不使用通用len()
的原因是什么?或者:如果queue.Queue
被命名为qsize
以启用__len__
功能,会出现什么问题?
答案 0 :(得分:11)
len()
并未针对queue.Queue
实施,因为这将是一个非常有吸引力的滋扰":只有专家才应该考虑使用的东西,但是&#34友好的名字"会鼓励非专家使用它。
与大多数序列类型(如list
和deque
)不同,queue.Queue
特别是意图用于多线程上下文(同样适用于multiprocessing
模块的队列类型)。虽然Queue
中的项目数量在任何特定时间肯定具有明确的价值,但用户代码无法找出该值是什么:在调用.qsize()
之间的时间返回并且您的代码可以查看返回的值,任何数量的其他线程(或multiprocessing
情况下的进程)可能对队列进行了任意数量的更改内容。
关于.qsize()
返回的值,唯一可以说的是,Queue
em>过去的时间。当您可以使用返回的值时,它可能具有任意更多(或更少)的值。
当然,如果你只运行一个帖子,情况就不是这样了 - 但是那时候没有必要为Queue
的实现复杂性付费(使用一个{{ 1}}或list
代替。)