【问题标题】:Python: Is there a thread-safe version of a deque?Python:是否有双端队列的线程安全版本?
【发布时间】:2018-02-16 19:48:21
【问题描述】:

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

但是,我想添加一个功能,如果需要,Consumer 可以通过将put 放回 gets 的前面(可能稍作修改)将其放回 @987654330 的前面@(这样get 返回的下一项就是刚刚添加的项,就像在堆栈中一样)。

我知道deques 可以做到这一点,但我读过here,它们仅对append()popleft() 是线程安全的。出于上述目的,我还需要使用appendleft()

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

【问题讨论】:

    标签: python multithreading collections thread-safety deque


    【解决方案1】:

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

    来自the docs

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

    【讨论】:

      【解决方案2】:

      Deque 作者在这里。

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

      希望这会有所帮助:-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-05
        • 2019-11-11
        • 1970-01-01
        • 2012-03-27
        相关资源
        最近更新 更多