Queue.Queue vs. collections.deque

问题:

我需要一个队列,多个线程可以把东西放入,多个线程可以读取。
Python至少有两个队列类Queue.Queue和collections.deque,前者似乎在内部使用后者。两者都声称在文档中是线程安全的。
但是,Queue文档也指出:

collections.deque是无限队列的替代实现,具有不需要锁定的快速原子append()和popleft()操作。

我猜我不太明白:这是否意味着deque完全线程安全?
如果是这样,我可能不完全明白两个班级之间的区别。我可以看到Queue添加了阻止功能。另一方面,它失去了一些deque功能,如对运营商的支持。
直接访问内部deque对象就是

x在Queue()。deque

线程安全的?
另外,为什么当deque线程安全的时候,Queue为什么要使用互斥体呢?

回答:

 Queue.Queuecollections.deque有不同的用途。 Queue.Queue旨在允许不同的线程使用排队的消息/数据进行通信,而collections.deque只是用作数据结构。这就是为什么Queue.Queue具有put_nowait()get_nowait()join()的方法,而collections.deque则没有。 Queue.Queue不能用作集合,这就是为什么它缺少in操作符的原因。
它归结为:如果你有多个线程,并且希望他们能够通信而不需要锁定,那么你正在寻找Queue.Queue;如果您只想要一个队列或双端队列作为数据结构,请使用collections.deque
最后,访问和操纵Queue.Queue的内部deque正在玩火 – 你真的不想这样做。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Queue.Queue vs. collections.deque

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 2 = 1