我有线程来添加项目,让我们说全局成功列表。
我知道线程通信应该通过Queue
完成,但是当读取队列documentation时,没有函数可以获得队列长度的精确计数。
Queue.qsize()返回队列的大致大小。注意,qsize()
0不保证后续的get()不会阻塞,也不会保证qsize()< maxsize保证put()不会阻塞。
我也尝试了len(queue)
,但它不起作用:
>>> import Queue
>>> q = Queue.Queue()
>>> q.put(1)
>>> q.put(2)
>>> len(q)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Queue instance has no attribute '__len__'
我还阅读了有关使用List
的信息,但如果数据已损坏,我还会{I} don't have definite answer。
我现在能想到的唯一选择是运行queue.get()
,直到queue
为空才能转换为列表。有更好的选择吗?
答案 0 :(得分:1)
qsize
不提供这些保证的原因是因为在调用.qsize()
和.get()
之间,某些其他线程可能会插入一个元素。除此之外,你应该使用qsize
。它会在调用时为您提供精确大小的队列。这里的“近似”一词意味着在调用之后,不再保证大小相同。但是,当处理访问共享数据结构的线程时,无论结构如何,您都将面临同样的问题。