无法迭代或以其他方式检查标准Queue类.
但是,它是为了扩展而构建的.
首先,如果你看一下source(从文档链接),你可以覆盖钩子方法_init,_qsize,_put和_get来改变实现.查看主类下面的子类,您可以看到它们是如何执行此操作的.
所以,一件容易的事就是用一个集替换deque实现:
class SetQueue(Queue.Queue):
def _init(self, maxsize):
self.queue = set()
def _put(self, item):
self.queue.add(item)
def _get(self):
return self.queue.pop()
(我没有实现_qsize,因为默认返回len(self.queue)没问题.)
现在您不必检查,只需将其添加到队列中,如果它已经存在,它将被忽略.
当然,这有不足之处,不再对队列进行排序.但是你可以通过使用OrderedSet(类似于集合中的OrderedDict)来解决这个问题.有一个recipe链接来自馆藏文档.一旦你有了:
class OrderedSetQueue(Queue.Queue):
def _init(self, maxsize):
self.queue = OrderedSet()
def _put(self, item):
self.queue.add(item)
def _get(self):
return self.queue.pop()
如果您确实希望能够检查队列中的值,可以为其添加一个方法:
class CheckableQueue(Queue.Queue): # or OrderedSetQueue