Skip to main content

Concurrencia en Python

En Python, existen varias formas de implementar concurrencia, cada una con sus propias características, ventajas y desventajas. Los tipos principales de concurrencia en Python son:

1. Multiprocesamiento:

  • Descripción: La biblioteca estándar de Python ofrece el módulo multiprocessing que permite la creación de procesos. Cada proceso tiene su propio espacio de memoria y puede ejecutarse de forma independiente.

  • Ventajas: Los procesos pueden aprovechar múltiples núcleos del procesador y están completamente aislados entre sí, lo que ayuda a evitar problemas de sincronización.

  • Desventajas: Los procesos son más pesados que los hilos en términos de consumo de recursos y pueden tener una sobrecarga adicional al comunicarse entre sí.

2. Multihilo:

  • Descripción: El módulo threading en Python permite la creación de hilos. Los hilos son ligeros y comparten el mismo espacio de memoria dentro de un proceso.

  • Ventajas: Los hilos son más ligeros y pueden compartir recursos fácilmente dentro de un proceso. Son ideales para tareas que involucran I/O, ya que permiten que el programa continúe ejecutándose mientras espera.

  • Desventajas: El intérprete global de bloque (GIL, por sus siglas en inglés) limita la ejecución simultánea de hilos en Python, por lo que no se benefician del paralelismo en programas intensivos en CPU.

3. Asincronía (asyncio):

  • Descripción: El módulo asyncio en Python permite la programación asíncrona basada en corutinas. Las corutinas se ejecutan de forma cooperativa, cediendo el control en puntos de espera, como I/O.

  • Ventajas: Es eficiente para tareas que implican mucho I/O o tiempos de espera, como operaciones de red o acceso a bases de datos. Permite ejecutar muchas tareas sin usar muchos recursos.

  • Desventajas: La programación asíncrona puede ser más difícil de entender y manejar que los hilos o procesos tradicionales.

4. Futuros (Futures):

  • Descripción: Los módulos concurrent.futures y asyncio ofrecen una abstracción llamada futuros, que representan un resultado futuro de una operación asíncrona.

  • Ventajas: Permiten manejar y coordinar tareas de forma más sencilla. Son compatibles tanto con hilos como con procesos y se pueden combinar con asyncio.

  • Desventajas: La implementación de futuros puede agregar complejidad al código.

5. Threads nativos:

  • Descripción: El módulo ctypes puede usarse para crear hilos nativos del sistema operativo, lo que puede evadir algunas limitaciones del GIL, aunque se necesita tener cuidado con la seguridad y la integridad de los datos.