如何在不删除项目的情况下获取队列中的项目?

新手上路,请多包涵

get() 从 Python 中的 队列 中删除并返回一个项目。

 import queue

q = queue.Queue() # Here

q.put("Apple")
q.put("Orange")
q.put("Banana")

print(q.get())
print(q.get())
print(q.get())

输出:

 Apple
Orange
Banana

现在,我想在不删除项目的情况下获取 队列 中的项目。

是否有可能做到这一点?

原文由 damon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 688
2 个回答

Queue 模块实现了多生产者、多消费者队列。当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用。

如您所见, Queue 模块专为与线程一起使用而创建,仅提供 FIFOLIFO 和 _优先级队列_,它们均未提供此功能。然而,通过检查 Queue 模块的 源代码,您可以看到它只使用了一个 collections.deque (双端队列),它可以轻松完成您的任务。您可以在恒定时间内索引第一项 ( [0] ) 和 .popleft()

原文由 jamylak 发布,翻译遵循 CC BY-SA 3.0 许可协议

queue_object.queue 将在双端队列对象中返回队列的副本,然后您可以使用该对象的切片。当然,它不会与原始队列同步,但可以让您在复制时查看队列。

有一个很好的理由解释为什么你不想在这个线程 comp.lang.python - Queue peek 中详细解释为什么你不想这样做。 .但如果您只是想了解 Queue 的工作原理,这是一种简单的方法。

 import Queue
q = Queue.Queue()
q.push(1)
q.put('foo')
q.put('bar')
d = q.queue
print(d)
deque(['foo', 'bar'])
print(d[0])
'foo'

原文由 synthesizerpatel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题