有谁知道一种迭代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