Чистый способ получить поведение, близкое к LIFO, из многопроцессорной обработки. Вопрос? (или даже просто * не * почти FIFO)

Кто-нибудь знает чистый способ получить поведение, близкое к LIFO, или даже не близкое к FIFO (например, случайное)?multiprocessing.Queue?

Alternative Question: Could someone point me to the code for the thread that manages the actual storage structure behind multiprocessing.Queue? Кажется, что в этом случае было бы тривиально предоставить доступ к LIFO, но я затерялся в кроличьей норе, пытаясь ее найти.

Заметки:

I believe multiprocessing.Queue does not guarantee order. Fine. But it is near-FIFO so near-LIFO would be great. I could pull all the current items off the queue and reverse the order before working with them, but I prefer to avoid a kludge if possible.

(редактировать) Чтобы уточнить: я делаю процесс моделирования с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)

Ответы на вопрос(2)

Ваш ответ на вопрос