我有一个队列(来自Queue
模块),我想要对它进行索引访问(例如,在不从队列中删除该项的情况下请求第4个项目)。
我看到队列内部使用了deque,并且deque有索引访问,但问题是如何在不(1)搞乱队列或(2)破坏线程安全性的情况下使用deque。
我有一个队列(来自Queue
模块),我想要对它进行索引访问(例如,在不从队列中删除该项的情况下请求第4个项目)。
我看到队列内部使用了deque,并且deque有索引访问,但问题是如何在不(1)搞乱队列或(2)破坏线程安全性的情况下使用deque。
import Queue
class IndexableQueue(Queue):
def __getitem__(self, index):
with self.mutex:
return self.queue[index]
当然,在索引成功或引发IndexError时释放互斥锁非常关键,我正在使用with
语句来实现这一点。在旧版Python中,会使用try
/finally
语句来达到相同的效果。
self.mutex
,self.queue
等具有公共名称的原因:恰好是为了指示它们允许高级应用程序(仔细地; - )自定义行为(如果 Queue 只是一个黑盒,它会为其内部使用不同的命名方案)。 - Alex Martelli