[pyar] Threads o Multiprocessing?

Claudio Freire klaussfreire en gmail.com
Vie Oct 21 13:10:37 ART 2011


2011/10/21 Martin Cerdeira <martincerdeira en gmail.com>:
> No quería aburrir con detalle, pero, se ve que por acortar me quedé
> demasiado corto con la data.
> El programa lo que hace es (va a hacer, porque no lo empecé a programar[0])
> lee una tabla de SQL y, por cada registro realiza una operación que, está
> definida por el usuario, puede ser llamar un script, llamar a un webservice,
> etc. Es como si fuera un DTS, donde, tenés una conexion de origen, una de
> destino y, en el medio podés hacer transformaciones de datos, llamar a
> scripts que hagan "cosas" con esos datos como llamar a un webservice, grabar
> un archivo, no se, lo que se te ocurra.

Suena I/O bound.
Si es I/O bound en efecto, con threads es más que suficiente.
Si las tareas son CPU-bound, sin embargo (o sea, te comen el CPU), te
va a convenir multiprocessing para deshacerte del GIL.

De cualquier manera, la forma de sincronización que más adecuada me
parece son colas, alguien lee de la base, pone las tareas en una cola,
y N workers sacan tareas de la cola para ejecutarlas. Eso se puede
hacer tanto con multiprocessing como multithreading.

La ventaja de threads sobre multiprocessing, si los podés usar, es que
son más livianos. Es más liviano crearlos, es más liviano mantenerlos.
Y la memoria compartida es en efecto compartida, cuando usás
multiprocessing, las estructuras de datos que compartas entre los
procesos se copian, una por proceso.



More information about the pyar mailing list