是否有“单插槽”队列?

WoJ*_*WoJ 5 python queue

我需要使用一个只包含一个元素的队列,任何新元素都会丢弃现有元素。有内置解决方案吗?

我编码的解决方案有效,但我努力不重新发明轮子:)

import Queue

def myput(q, what):
    # empty the queue
    while not q.empty():
        q.get()
    q.put(what)

q = Queue.Queue()
print("queue size: {}".format(q.qsize()))
myput(q, "hello")
myput(q, "hello")
myput(q, "hello")
print("queue size: {}".format(q.qsize()))
Run Code Online (Sandbox Code Playgroud)

编辑:遵循一些评论和答案——我知道一个变量就是为此:) 不过,在我的程序中,队列将用于进程之间的通信。

Wil*_*ill 3

当您指定使用队列在进程之间进行通信时,您应该使用multiprocesssing.Queue.

为了确保队列中一次只有一个项目,您可以让生产者共享一个锁,并且在锁定时首先get_nowait从队列中删除put。这类似于代码中的循环,但没有两个生产者在放入新项目之前都清空队列的竞争条件,因此最终在队列中出现两个项目。

  • 或者从另一端攻击问题,让消费者“get”直到空,然后只处理最后一个成功的“get”。 (4认同)