Python:双端队列有线程安全版本吗?

Vic*_*ard 5 python collections multithreading thread-safety deque

Consumer我有一个由类和类组成的线程程序Producer。目前,我在实现中使用 Fifo queue.Queue,生产者put获取队列末尾的数据,消费者get获取队列末尾的数据。

但是,我想添加一个功能,如果有必要,可以Consumer通过将其放回前面来put支持(可能稍微修改过的)项目(以便返回的下一个项目是刚刚添加的项目,就像在堆栈中一样)。getQueueget

我知道这对于 s 是可能的,但我在这里deque读到它们仅对于和是线程安全的。出于上述目的,我还需要使用.append()popleft()appendleft()

是否存在具有 a 特性的线程安全数据结构deque?如果没有,我可以deque通过在使用时放入自己的锁来使线程安全吗appendleft

Ray*_*ger 8

Deque 作者在这里。

  • 您感兴趣的操作都是原子的。
  • 唯一的非原子操作是: remove()index()countclear(),因为相等测试可以进行纯Python回调,或者由于decrefs可以触发任意Python代码。

希望这可以帮助 :-)


fan*_*ous 0

虽然某些deque功能不是线程安全的,但您尝试做的事情应该是线程安全的。

来自文档

双端队列支持线程安全、内存高效的追加和从双端队列的任一侧弹出