gpt4 book ai didi

python - Queue.Queue 与 collections.deque

转载 作者:IT老高 更新时间:2023-10-28 12:24:59 26 4
gpt4 key购买 nike

我需要一个队列,多个线程可以将内容放入其中,并且多个线程可以从中读取。

Python 至少有两个队列类,Queue.Queuecollections.deque,前者似乎在内部使用后者。两者都在文档中声称是线程安全的。

但是,队列文档也指出:

collections.deque is an alternativeimplementation of unbounded queueswith fast atomic append() andpopleft() operations that do notrequire locking.

我想我不太明白:这是否意味着双端队列毕竟不是完全线程安全的?

如果是这样,我可能无法完全理解这两个类之间的区别。我可以看到 Queue 添加了阻塞功能。另一方面,它失去了一些双端队列功能,例如对 in-operator 的支持。

直接访问内部deque对象,是

x in Queue().deque

线程安全?

另外,为什么在 deque 已经是线程安全的情况下,Queue 使用互斥锁来执行它的操作?

最佳答案

Queue.Queuecollections.deque 有不同的用途。 Queue.Queue 旨在允许不同线程使用排队的消息/数据进行通信,而 collections.deque 仅用作数据结构。这就是为什么 Queue.Queueput_nowait()get_nowait()join() 等方法的原因,而collections.deque 没有。 Queue.Queue 不打算用作集合,这就是它缺少 in 运算符之类的原因。

归结为:如果您有多个线程并且希望它们能够在不需要锁的情况下进行通信,那么您正在寻找 Queue.Queue;如果您只想将队列或双端队列作为数据结构,请使用 collections.deque

最后,访问和操作 Queue.Queue 的内部双端队列是在玩火——你真的不想这样做。

关于python - Queue.Queue 与 collections.deque,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/717148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com