11

我有一个队列(来自Queue模块),我想获得对它的索引访问。(即,能够请求队列中的第 4 项,而无需将其从队列中删除。)

我看到一个队列在内部使用了一个双端队列,而双端队列具有索引访问。问题是,我怎样才能使用双端队列而不(1)弄乱队列,(2)破坏线程安全。

4

1 回答 1

13
import Queue

class IndexableQueue(Queue):
  def __getitem__(self, index):
    with self.mutex:
      return self.queue[index]

无论索引是成功还是引发 IndexError,释放互斥锁当然是至关重要的,我为此使用了一个with语句。在较旧的 Python 版本中,try/finally将用于相同的效果。

于 2009-08-18T14:39:19.283 回答