获取线程安全的Python队列的最佳索引访问方法
我有一个队列(来自Queue
模块),我想要能够通过索引来访问它的元素。(也就是说,我想要在不把它从队列中移除的情况下,直接获取队列中第四个元素。)
我发现队列内部使用了一个双端队列(deque),而双端队列是可以通过索引来访问的。我的问题是,怎样才能在不(1)搞乱队列,和(2)破坏线程安全的情况下,使用这个双端队列呢?
1 个回答
14
import Queue
class IndexableQueue(Queue):
def __getitem__(self, index):
with self.mutex:
return self.queue[index]
无论索引操作成功与否,释放互斥锁都是非常重要的。如果发生了索引错误(IndexError),也要确保锁被释放。我在这里使用了一个 with
语句来处理这个问题。在早期的 Python 版本中,通常会用 try
和 finally
来达到同样的效果。