Pool of workers (Grupo de procesos)
Es un concepto en programación que se refiere a un conjunto de procesos o hilos de ejecución preexistentes que están disponibles para realizar tareas o trabajos asignados. El propósito de un pool of workers es evitar el costo de creación y destrucción repetitiva de procesos o hilos, y aprovechar los recursos disponibles de manera eficiente. En un pool of workers, los procesos o hilos se crean una vez y se mantienen en espera para ejecutar tareas en paralelo. En lugar de crear un nuevo proceso o hilo cada vez que se necesita realizar una tarea, se toma uno disponible del pool y se le asigna el trabajo. Una vez que el trabajo se completa, el proceso o hilo se devuelve al pool para estar disponible para futuras tareas.
Basicamente consiste en crear procesos idle, les doy tareas, los utilizo, terminan y se vuelven a liberar y ubicar en el Pool para que puedan ser reutilizados.
Pool en Multiprocessing
En el módulo multiprocessing de Python, la clase Pool se utiliza para crear y administrar un conjunto de procesos secundarios. Al crear una instancia de Pool, se especifica el número máximo de procesos secundarios que se crearán en el grupo.
Una vez creado el grupo de trabajadores, se pueden enviar tareas a la piscina utilizando los métodos de la clase Pool, como apply(), map(), imap(), entre otros. Estos métodos distribuyen las tareas entre los procesos secundarios disponibles en el grupo, y los trabajadores se encargan de ejecutar las tareas de manera concurrente.
La ventaja de utilizar un "pool of workers" es que permite aprovechar el poder de procesamiento de múltiples núcleos o procesadores en un sistema. Cada proceso secundario en el grupo se encarga de ejecutar una tarea específica, lo que permite que varias tareas se realicen simultáneamente. Esto puede acelerar la ejecución de las tareas y mejorar el rendimiento de la aplicación.
Comandos importantes
**pool.apply()** # corre una funcion con uno de los procesos
pool.**map()** # mapea una funcion en un iterable
pool.**starmap()** # tambien mapea una funcion pero a esta se le puede pasar mas de 1 argumentos
Nota recordatoria: Concurrencia significa que tiene un especie de paralelismo (aunque no lo sea realmente)
Notas de otros comandos: