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.