Ответ 1
len()
не применяется для queue.Queue
, потому что это было бы "привлекательной неприятностью": что-то, что только эксперт должен даже рассмотреть, но "дружественное имя" побудило бы не экспертов использовать его.
В отличие от большинства типов последовательностей (например, list
и deque
), queue.Queue
специально предназначен для использования в многопоточных контекстах (и аналогично для типа очереди multiprocessing
). Хотя количество элементов в Queue
, безусловно, имеет определенное значение в любой конкретный момент времени, невозможно, чтобы код пользователя узнал, что это за значение: между тем, как возвращается вызов .qsize()
, и ваш код может смотреть на возвращаемое значение, любое количество других потоков (или процессов в случае multiprocessing
) могло внести любое количество изменений в содержимое очереди.
Итак, единственное, что можно сказать о значении, возвращаемом .qsize()
, это то, что в Queue
было много значений в нем в некоторый момент в прошлом. К тому моменту, когда вы можете использовать возвращаемое значение, оно может иметь в нем сколько угодно (или меньше) значений.
Конечно, это не так, если вы используете только один поток, но тогда нет необходимости платить за сложность реализации Queue
(вместо этого используйте list
или deque
).