En el mundo de la programación, la concurrencia es una propiedad que permite que se ejecute más de una tarea al mismo tiempo. Para lograr esto en Python, se utiliza el módulo 'multiprocessing'. Este módulo es una gran herramienta que permite a los desarrolladores crear procesos que se ejecutan concurrentemente.
En esencia, 'multiprocessing' facilita la creación de procesos en Python, cada uno de los cuales ejecuta su propio script de Python como su programa principal. Cada proceso nuevo tiene su propio espacio de dirección de memoria, por lo que no comparte datos globales con otros procesos. Esto asegura que las variables globales de cada proceso se mantengan intactas sin la interferencia de otros procesos.
A continuación, se presenta un ejemplo básico de cómo usar 'multiprocessing' en Python:
import multiprocessing
def f(x):
return x*x
if __name__ == '__main__':
with multiprocessing.Pool(5) as p:
print(p.map(f, [1, 2, 3]))
En este código, se inicializa un 'pool' de procesos, luego se mapea una función (en este caso, una función que eleva un número al cuadrado) a una lista de inputs. Cada proceso en el 'pool' coge un input de la lista, ejecuta la función con ese input y guarda el resultado. Al final, se imprimen los resultados de todos los procesos.
El módulo 'multiprocessing' es más adecuado para casos en los que se necesitan realizar tareas que son I/O-bound (limitadas por el input/output), como operaciones de lectura y escritura de archivos, o tareas de CPU-bound (ligadas al uso del CPU) que requieren un cálculo intensivo y pueden beneficiarse de la ejecución paralela.
A pesar de sus ventajas, usar multiprocessing requiere cierta cautela. El hecho de que cada proceso tenga su propio espacio de memoria significa que compartir información entre procesos es más difícil y requiere técnicas especiales como el uso de colas o 'pipes'.
En resumen, multiprocessing es un módulo importante en Python que permite aprovechar al máximo los recursos de la máquina, en particular para las tareas que no son inherentemente secuenciales.