Concurrencia con procesos, hilos de ejecución y co-rutinas¶
Python incluye herramientas sofisticadas para manejar operaciones concurrentes utilizando procesos e hilos de ejecución. Incluso muchos programas relativamente simples pueden hacerse ejecutar más rápido aplicando técnicas para ejecutar partes del trabajo al mismo tiempo utilizando estos módulos.
subprocess
proporciona una interfaz para crear y comunicarse con
procesos secundarios. Es especialmente bueno para ejecutar programas que
producen o consumen texto, ya que la interfaz admite el paso de datos de ida y
vuelta a través de los canales de entrada y salida estándar del nuevo proceso.
El módulo signal
expone el mecanismo de señal de Unix para enviar
eventos a otros procesos. Las señales se procesan de forma asíncrona
generalmente interrumpiendo lo que el programa está haciendo en el momento en
que señal llega. La señalización es útil como un sistema de mensajes basto,
pero otras técnicas de comunicación entre procesos son más confiables y pueden
entregar mensajes más complicados.
threading
incluye una interfaz de alto nivel orientada a objetos para
trabajar con concurrencia desde Python. Los objetos Thread
se ejecutan al
mismo tiempo dentro del mismo proceso y comparten memoria. Usando hilos es una
forma sencilla de escalar para tareas que son más enlazadas a la E/S que al
CPU.
El módulo :mod: multiprocessing refleja threading
, excepto que en
lugar de una clase Thread
proporciona un Process
. Cada Process
es
un verdadero proceso del sistema sin memoria compartida, pero
multiprocessing
proporciona funciones para compartir datos y pasar
mensajes entre ellos de manera que en muchos casos de conversión de hilos a
procesos es tan simple como cambiar unas pocas declaraciones import
asyncio
proporciona un marco para concurrencia y manejo asíncrono de E/S
utilizando un sistema de protocolo basado en clases o co-rutinas.
asyncio
reemplaza a los módulos antiguos asyncore
y
asynchat
, que aún están disponibles pero son obsoletos.
concurrent.futures
proporciona la implementación de ejecutores basados
en hilos y en procesos para administrar grupos de recursos para ejecutar tareas
concurrentes.
- subprocess — Generar procesos adicionales
- signal — Eventos asíncronos del sistema
- threading — Gestionar operaciones concurrentes dentro de un proceso
- multiprocessing — Gestionar procesos como hilos
- asyncio — E/S asíncrona, bucle de eventos y herramientas de concurrencia
- concurrent.futures — Administrar grupos de tareas concurrentes