我有一个队列(来自Queue
模块),我希望获得索引访问权限。 (即,能够在队列中请求第4项,而不将其从队列中删除。)
我看到一个队列在内部使用deque,而deque已经为索引访问了。问题是,如何在没有(1)弄乱队列的情况下使用双端队列,(2)破坏线程安全性。
答案 0 :(得分:11)
import Queue
class IndexableQueue(Queue):
def __getitem__(self, index):
with self.mutex:
return self.queue[index]
释放互斥锁当然至关重要的是索引是成功还是引发IndexError,而我正在使用with
语句。在较旧的Python版本中,try
/ finally
将用于相同的效果。