Чистый способ получить поведение, близкое к 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 believemultiprocessing.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)