有谁知道一种迭代Queue.Queue元素而不将其从Queue中删除的pythonic方法。我有一个生产者/消费者类型的程序,其中要处理的项目是使用Queue.Queue传递的,我希望能够打印剩余的项目。有任何想法吗?

最佳答案

您可以遍历基础数据存储的副本:

for elem in list(q.queue)

尽管这绕过了Queue对象的锁,但是列表副本是一个原子操作,应该可以正常工作。

如果要保留锁,为什么不将所有任务从队列中拉出,制作列表副本,然后将其放回去。
mycopy = []
while True:
     try:
         elem = q.get(block=False)
     except Empty:
         break
     else:
         mycopy.append(elem)
for elem in mycopy:
    q.put(elem)
for elem in mycopy:
    # do something with the elements

10-08 08:40
查看更多