【发布时间】:2017-03-06 15:09:08
【问题描述】:
我是否可以配置Queue.Queue 使其始终接受新项目,如果队列已满则简单地丢弃最旧的项目?
如果没有,标准库中是否有另一个队列类可以做到这一点?
(我不能使用双端队列,因为我有一个需要同步的生产者/消费者设置。)
【问题讨论】:
-
您可以使用
collections.deque传递maxlen参数 -
啊,但我需要同步它。看起来它不像只使用互斥锁那么简单,因为我想阻塞消费者线程直到项目可用(而不是连续轮询)。
-
我也这么认为。我重新打开了
-
平时都是这么干的,为什么不这么简单呢?顺便说一句,为了安全起见,你知道 python 的 GIL 对线程的限制吗?
-
@spectras 我目前在消费者循环中使用
queue.get(block=True)。在引擎盖下,我假设这等待一个条件变量。要在此处使用互斥锁,我将不得不忙于等待由互斥锁保护的queue.get(block=False),这会消耗更多的 CPU。