[pyar] multiprocessing, FIFOs y mapas

Marcos Dione mdione en grulic.org.ar
Sab Mar 4 12:59:08 ART 2017


On Thu, Mar 02, 2017 at 05:55:27PM -0300, Facundo Batista wrote:
> 2017-03-01 19:14 GMT-03:00 Marcos Dione <mdione en grulic.org.ar>:
> >     tengo un sistema que
> > tiene N workers y un masteri, implementados con multiprocessing
[...]
> > el master mete trabajos para hacer en una cola, los workers sacan
> > trabajos y laburan, todo muy simple. pero no.
> >
> >     un worker, cuando termina, puede generar entre 0 y 4 trabajos mas.
> > hay una condicion de corte que hace que en un momento determinado los
> > workers siempre devuelven 0 trabajos, asi que eso no es problema. la
> > complicacion viene cuando es mas eficiente hacer uno de estos nuevos
> > trabajos inmediatamente que hacer uno de los que ya estan en la cola. o
> > sea, necesito una pila, realmente, pero multiprocessing no tiene.
> >
> >     estaba pensando en hacer esto:
> >
> > * una cola de trabajos A de tamanyo N+1 master->workers.
> > * una cola B de tamanyo 4*N+1 workers->master para los trabajos nuevos.
> > * el master inicialmente mete un trabajo (esto es parte del problema).
> > * luego se queda esperando trabajos nuevos por B, los saca y los mete en
> > una pila, y de la pila saca y los mete en A. ya estoy viendo que esto
> > parece estudpido, pero como A tiene un tamanyo limitado, no puedo meter
> > cosas indefinidamente.
> > * los workers sacan trabajos de A y eventualemnte meten nuevos en B.
> > * notar que tanto A como B bloquean si estan vacias o llenas, asi que hay
> > que teenr mucho ojo con esto.
> 
> Creo que porque no llego a "ver" qué complicación tenés con las colas.
> ¿Las implementás vos? ¿Cómo mete el master tareas? ¿cómo las consume
> cada worker? ¿cómo te devuelve cada worker el resultado y/o nuevas
> tareas?

    las colas son las Queue de mp, pero en realidad lo que necesito es un
Stack y no hay, y las colas son verdaderos FIFO y no listas a las que
puedas hacer append()/pop() y simular una pila. 

    Por otro lado, me parecía medio complicado hacerlo con dos colas por
el tema de que son (por default) bloqueantes y que si no hacía bien la
tarea iba a terminar con deadlocks (el master esperando laburo de los
workers y los workers esperando del master).

> Si vos tenés la cola implementada a gusto en el proceso del master,
> ¿no podés tener una LIFO y ya? Entonces, metés una tarea ahí, y las
> nuevas tareas que van cayendo se consumen antes que las viejas...

    bueno, eso mas o menos termine haciendo. gracias por la idea :)

-- 
(Not so) Random fortune:
Terrorism isn't a crime against people or property. It's a crime against
our minds, using the death of innocents and destruction of property to
make us fearful.
	    -- Bruce Schneier


Más información sobre la lista de distribución pyar