Una forma limpia de obtener un comportamiento cercano al LIFO a partir del multiprocesamiento. (o incluso solo * no * cerca de FIFO)

¿Alguien sabe una manera limpia de obtener un comportamiento cercano a LIFO o incluso no cercano a FIFO (por ejemplo, aleatorio) demultiprocessing.Queue?

Pregunta alternativa: ¿Alguien podría indicarme el código del subproceso que administra la estructura de almacenamiento real detrás?multiprocessing.Queue? Parece que sería trivial dentro de eso proporcionar un acceso LIFO aproximadamente, pero me perdí en el agujero del conejo tratando de encontrarlo.

Notas:

Yo creomultiprocessing.Queue no garantiza orden. Multa. Pero está cerca de FIFO, así que cerca de LIFO sería genial.Podría sacar todos los elementos actuales de la cola e invertir el orden antes de trabajar con ellos, pero prefiero evitar un poco de información si es posible.

(Editar) Para aclarar: estoy haciendo una simulación de CPU conmultiprocessing y así no pueden usar las colas especializadas deQueue. Como no he visto ninguna respuesta durante unos días, he agregado la pregunta alternativa anterior.

En caso de que sea un problema, a continuación hay una ligera evidencia de quemultiprocessing.Queue es cerca de FIFO. Simplemente muestra que, en un caso simple (un solo hilo), es perfectamente FIFO en mi sistema:

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

impresiones: mín, máx y promedio son exactamente 1 (FIFO perfecto)

Respuestas a la pregunta(2)

Su respuesta a la pregunta