Python 如何在推送新对象之前检查队列中是否存在对象

Python 如何在推送新对象之前检查队列中是否存在对象,python,queue,pydev,Python,Queue,Pydev,我正在使用Python队列: q = Queue.Queue() 我使用q.put(item)将某个类的对象放入前面提到的队列中。但是,在将项目放入队列之前,我想检查它是否已经存在于队列中。有办法做到这一点吗?[不取出队列中的所有对象,然后将它们全部推回] 此外: 我不知道如何才能真正看到(调试时)放入队列中的变量。我正在使用Pydev,在变量窗口中看到的都是非空和非满之类的东西。如何在运行时查看队列中的内容?您可以将“q.queue”视为一个列表 if item in q.queue:

我正在使用Python队列:

q = Queue.Queue()
我使用
q.put(item)
将某个类的对象放入前面提到的队列中。但是,在将项目放入队列之前,我想检查它是否已经存在于队列中。有办法做到这一点吗?[不取出队列中的所有对象,然后将它们全部推回]

此外:


我不知道如何才能真正看到(调试时)放入队列中的变量。我正在使用Pydev,在
变量
窗口中看到的都是
非空
非满
之类的东西。如何在运行时查看队列中的内容?

您可以将“q.queue”视为一个列表

if item in q.queue:
   print("already there!")

如果需要,可以为自己的类提供这样的机制

class UniqueQueue:

    def __init__(self):
        self.__item_pool = []

    def push(self, item):
        if item not in self.__item_pool:
            self.__item_pool.append(item)

    def pop(self):
        return self.__item_pool.pop()

是否确实需要排队。排队<代码>队列。队列是一个同步集合,因此提供了比大多数情况下需要的更多功能

您可能想看看如何使用
queue.deque
或可能使用创建自己的
OrderedSet

例如


在python2.5中,
队列
模块在python2.5上被称为
队列

,这会导致
:类型为'instance'的参数不可编辑
这不会引起竞争条件,在检查和打印/处理数据之间,发生了相同的错误->对于Python 3.6->TypeError:type'Queue'的参数不是iterableNote,
q
Queue.Queue
对象的实例,而
q.Queue
是允许迭代的
collections.deque
参数。
q = queue.deque()
q.appendleft(1)
q.appendleft(2)
q.appendleft(3)
assert 2 in q
assert q.pop() == 1