
Ejemplo de Multiprocesamiento en Python

Multiprocesamiento es una técnica de programación en la que se utilizan múltiples procesos para realizar tareas simultáneamente, lo que permite utilizar eficientemente recursos de hardware de un sistema.
En Python, la librería `multiprocessing` proporciona los medios para crear procesos y coordinar la comunicación entre ellos. En este artículo, exploraremos un ejemplo de código que utiliza el multiprocesamiento en Python para mejorar el rendimiento de una tarea.
Configuración del Entorno
Para poder utilizar la librería `multiprocessing` en nuestro código, debemos importarla. Para ello, podemos utilizar el siguiente comando:
import multiprocessing
Además, es importante tener en cuenta que la mayoría de las veces en las que se utiliza el multiprocesamiento, se busca obtener un rendimiento mayor a partir del uso de múltiples núcleos o procesadores. Por lo tanto, es recomendable ejecutar nuestro código en un sistema con múltiples núcleos disponibles.
Creación de Procesos
El siguiente paso es crear los procesos que realizarán la tarea deseada. En nuestro ejemplo, supongamos que queremos calcular la suma de una lista de números de gran tamaño. En lugar de realizar la suma secuencialmente, podemos crear varios procesos para que realicen la suma de forma simultánea, lo que acelerará el proceso.
Para crear un proceso en Python, utilizamos la clase `Process` de la librería `multiprocessing`:
from multiprocessing import Process
def sum_list(numbers):
# función para sumar la lista de números
if __name__ == '__main__':
p1 = Process(target=sum_list, args=(numbers_partial_1,))
p2 = Process(target=sum_list, args=(numbers_partial_2,))
En este ejemplo, creamos dos procesos (`p1` y `p2`) que llaman a la función `sum_list`, que calcula la suma de una parte de la lista de números. Los argumentos que pasamos a `Process` son la función que queremos ejecutar en el proceso y los parámetros que necesita.
Comunicación entre Procesos
Una vez que hemos creado los procesos, necesitamos coordinar su comunicación. En nuestro ejemplo, tendríamos que sumar las sumas parciales que cada proceso ha calculado. Para ello, podemos utilizar la función `join` de `Process`, que espera a que el proceso termine de ejecutarse.
if __name__ == '__main__':
p1.start()
p2.start()
p1.join()
p2.join()
total_sum = sum_list(numbers_partial_1) + sum_list(numbers_partial_2)
Aquí, después de iniciar los procesos, esperamos a que ambos finalicen su ejecución con `join()`. Posteriormente, sumamos las sumas parciales para obtener el resultado final.
Conclusión
En este artículo, hemos visto un ejemplo de código que muestra cómo utilizar el multiprocesamiento en Python para mejorar el rendimiento de una tarea. Al utilizar múltiples procesos para ejecutar la tarea, hemos logrado que el tiempo de ejecución se reduzca significativamente.
Si tienes una tarea que tarde mucho tiempo en ejecutarse, podrías considerar el multiprocesamiento como una alternativa para acelerarla. ¡Inténtalo en tus proyectos!
Preguntas frecuentes
¿El multiprocesamiento siempre acelera la ejecución de una tarea?
No necesariamente. Si la tarea es pequeña o no es lo suficientemente compleja, es posible que el tiempo utilizado para crear y coordinar los procesos sea mayor que el tiempo de ejecución de la tarea en sí.
¿Cuántos procesos es recomendable utilizar?
La cantidad de procesos a utilizar va a depender del número de núcleos o procesadores que tenga el sistema donde se ejecuta el código y de la complejidad de la tarea a realizar. Es recomendable probar distintas cantidades de procesos y medir el rendimiento para determinar la cantidad óptima.
¿Es posible compartir datos entre procesos?
Sí, es posible compartir datos entre procesos utilizando la clase `Value` de la librería `multiprocessing`. Además, si es necesario compartir estructuras de datos más complejas, como listas o diccionarios, podemos utilizar la clase `Manager` de `multiprocessing`.
¿Es lo mismo multiprocesamiento que multihilo?
No, aunque ambos conceptos tienen como objetivo mejorar el rendimiento de un sistema utilizando distintos recursos simultáneamente, los procesos son unidades de ejecución independientes que comparten poco o ningún estado entre ellos, mientras que los hilos comparten el mismo espacio de memoria y pueden acceder a las mismas variables y estructuras de datos.
[nekopost slugs="maptplotlib-diseno-ajustado,multiplicacion-sabia-de-elementos-numpy,generar-un-numero-flotante-aleatorio-python,numeros-de-formato-de-python,pandas-llenar-nan-con-0,metodo-de-actualizacion-del-diccionario-python,use-la-funcion-aleatoria-de-python-numpy,python-crea-tabla-json,modulo-de-ruta-del-sistema-operativo-python"]
Deja una respuesta