Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Desafío: El Recolector Paralelo de Cuadrados | Multithreading vs. Multiprocessing
Programación Estructural en Python
Sección 3. Capítulo 5
single

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.

Note
Nota

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.

1234567891011121314151617181920
from 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.

Tarea

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_square para que reciba dos argumentos: el entero a elevar al cuadrado y la lista results.
  • En compute_square, calcular el cuadrado del entero y agregarlo a la lista results.
  • Para cada número en numbers, crear un Process que apunte a compute_square con el número y results como 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

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 5
single

single

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

some-alt