有谁知道一种获得接近 LIFO 甚至不接近 FIFO(例如随机)行为的干净方法multiprocessing.Queue
?
替代问题:有人可以指出管理背后实际存储结构的线程代码multiprocessing.Queue
吗?提供大约 LIFO 访问似乎是微不足道的,但我在试图找到它的兔子洞中迷路了。
笔记:
- 相信
multiprocessing.Queue
不保证顺序。美好的。但它接近先进先出,所以接近 LIFO 会很棒。 - 在使用它们之前,我可以将所有当前项目从队列中拉出并颠倒顺序,但如果可能的话,我更愿意避免混乱。
(编辑)澄清:我正在做一个 CPU 绑定模拟,multiprocessing
因此不能使用来自Queue
. 由于我几天没有看到任何答案,所以我在上面添加了替代问题。
multiprocessing.Queue
如果这是一个问题,下面是接近 FIFO的轻微证据。它只是表明在一个简单的情况下(单线程),它在我的系统上是完美的 FIFO:
import multiprocessing as mp
import Queue
q = mp.Queue()
for i in xrange(1000):
q.put(i)
deltas = []
while True:
try:
value1 = q.get(timeout=0.1)
value2 = q.get(timeout=0.1)
deltas.append(value2-value1)
except Queue.Empty:
break
#positive deltas would indicate the numbers are coming out in increasing order
min_delta, max_delta = min(deltas), max(deltas)
avg_delta = sum(deltas)/len(deltas)
print "min", min_delta
print "max", max_delta
print "avg", avg_delta
打印:最小值、最大值和平均值正好为 1(完美 FIFO)