【发布时间】:2010-11-20 14:33:54
【问题描述】:
我有一个队列(来自Queue 模块),我想获得对它的索引访问。 (即,能够请求队列中的第 4 项,而无需将其从队列中移除。)
我看到一个队列在内部使用了一个双端队列,而双端队列具有索引访问。问题是,我怎样才能在不(1)弄乱队列,(2)破坏线程安全的情况下使用双端队列。
【问题讨论】:
-
为什么你使用队列而不是顺序地入队和出队?这只是线程之间的共享对象吗?
-
我不确定您所说的“按顺序将事物入队和出队”是什么意思。我什至不明白你的第二个问题:是的,队列是线程之间共享的。
-
队列有按顺序入队和出队的东西。 “按顺序”的概念意味着除了附加到一端并从另一端弹出之外,它们很少被访问。你为什么要打破这个关于“排队”的默认假设?
-
@S.Lott,Queue.Queue 中的排队规则旨在通过子类化进行定制——这就是
self.mutex、self.queue和 c 具有公共名称的原因:正是为了表明它们允许高级应用程序(小心地;-)自定义行为(如果 Queue 只是一个黑匣子,它将对其内部使用不同的命名方案)。 -
@Alex Martelli:谢谢,但是,我仍然对这个问题感到困惑——队列是否按顺序使用?如果不是,为什么还要考虑队列结构?仅仅因为互斥锁?为什么不使用互斥锁的其他共享对象?还是信号量?还是其他类型的锁定?如果队列的 FIFO 特性不是问题的一部分,为什么还要使用队列?
标签: python multithreading queue deque