Python线程将项目累积到集合

时间:2016-04-14 21:58:40

标签: python multithreading

我有线程来添加项目,让我们说全局成功列表。

我知道线程通信应该通过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为空才能转换为列表。有更好的选择吗?

1 个答案:

答案 0 :(得分:1)

qsize不提供这些保证的原因是因为在调用.qsize().get()之间,某些其他线程可能会插入一个元素。除此之外,你应该使用qsize。它会在调用时为您提供精确大小的队列。这里的“近似”一词意味着在调用之后,不再保证大小相同。但是,当处理访问共享数据结构的线程时,无论结构如何,您都将面临同样的问题。