single
Desafío: El Recolector Paralelo de Cuadrados
Desliza para mostrar el menú
La multiprocesamiento en Python permite ejecutar múltiples procesos en paralelo, cada uno con su propio intérprete de Python y espacio de memoria. Este enfoque es especialmente útil para tareas que requieren mucha CPU, donde se desea aprovechar varios núcleos del procesador para realizar cálculos más rápido. Al utilizar multiprocesamiento, se puede mejorar significativamente el rendimiento en operaciones que requieren cálculos intensivos, como procesamiento de datos, cálculos científicos o simulaciones.
La clase multiprocessing.Manager proporciona una forma de crear objetos compartidos, como listas y diccionarios, que pueden ser accedidos y modificados de manera segura por múltiples procesos. Cuando se necesita recopilar resultados o coordinar datos entre diferentes instancias de Process, siempre se debe utilizar un Manager para crear estos objetos compartidos. Las listas y diccionarios normales de Python no se comparten entre procesos, por lo que los cambios realizados en un proceso no serán visibles para los demás. Con una lista de Manager, cada proceso puede agregar o modificar datos, y todos los cambios serán visibles para cada proceso que utilice ese objeto compartido.
1234567891011121314151617181920from multiprocessing import Process, Manager def add_value(value, shared_list): shared_list.append(value) if __name__ == "__main__": manager = Manager() shared_list = manager.list() processes = [] values = [10, 20, 30, 40, 50] for v in values: p = Process(target=add_value, args=(v, shared_list)) processes.append(p) p.start() for p in processes: p.join() print("Collected results:", list(shared_list))
Este código demuestra cómo utilizar multiprocessing.Manager para crear una lista compartida a la que varios procesos pueden acceder y modificar. Cada proceso calcula el cuadrado de un número y agrega su resultado a la lista compartida. Al usar una lista de Manager, se garantiza que todos los procesos puedan compartir y recopilar datos de manera segura, lo que permite reunir resultados de procesos independientes que se ejecutan en paralelo.
Desliza para comenzar a programar
Escribir una función llamada compute_square que reciba un solo entero y una lista results como argumentos, calcule el cuadrado del entero y agregue el resultado a la lista results.
Luego, utilizando la clase multiprocessing.Process, crear un proceso separado para cada número en la lista numbers para calcular su cuadrado en paralelo. Recopilar los resultados de todos los procesos y almacenarlos en la variable results.
- Implementar la función
compute_squarepara que reciba dos argumentos: el entero a elevar al cuadrado y la listaresults. - En
compute_square, calcular el cuadrado del entero y agregarlo a la listaresults. - Para cada número en
numbers, crear unProcessque apunte acompute_squarecon el número yresultscomo argumentos. - Iniciar todos los procesos y luego unirlos para asegurar que todos los cálculos finalicen antes de revisar los resultados.
- Almacenar todos los cuadrados calculados en la lista
results.
Solución
¡Gracias por tus comentarios!
single
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla