Saltar a contenido

Threads y Multiprocessing: Paralelismo Real

Cuando necesitas realizar cálculos intensivos o procesar múltiples tareas de forma simultánea, Python ofrece dos caminos distintos. Elegir el correcto depende de si tu programa está esperando algo externo (como internet) o si está exprimiendo el procesador.


1. Threading (Hilos)

Los hilos permiten que un programa ejecute múltiples partes de su código "al mismo tiempo" compartiendo la misma memoria.

  • Ideal para: Tareas de entrada/salida (I/O Bound). Por ejemplo, leer 10 archivos de texto simultáneamente o consultar 5 APIs al mismo tiempo.
  • Limitación: En Python existe el GIL (Global Interpreter Lock), que impide que dos hilos ejecuten código Python al mismo tiempo en diferentes núcleos. Por eso, los hilos son mejores para tareas de espera.

2. Multiprocessing (Multiprocesamiento)

A diferencia de los hilos, el multiprocesamiento crea instancias separadas de Python, cada una con su propio espacio de memoria y su propio núcleo del procesador.

  • Ideal para: Tareas de cálculo intensivo (CPU Bound). Por ejemplo, procesar imágenes pesadas, cálculos matemáticos complejos o minería de datos.
  • Ventaja: Salta la limitación del GIL, permitiendo un paralelismo real en procesadores multi-núcleo.

¿Cuál elegir?

Característica Threading Multiprocessing
Memoria Compartida (Ligera) Separada (Pesada)
Ideal para Esperar (Red, Disco) Calcular (Matemáticas, Video)
Limitación Bloqueado por el GIL Mayor consumo de RAM

Reto: Simulador de Hilos

Vamos a simular la ejecución de una tarea en un hilo separado para entender la sintaxis básica del módulo threading.

Instrucciones:

  1. Importa el módulo threading.
  2. Define una función simple llamada tarea que no reciba parámetros y solo retorne un valor (en el simulador verificaremos su existencia).
  3. Crea un hilo llamado mi_hilo usando threading.Thread(target=tarea).
  4. Inicia el hilo con el método .start().
  5. Usa .join() para asegurar que el programa principal espere a que el hilo termine.

# Programación con hilos: