8. Asyncio

Hasta ahora, cada script del tutorial ha sido secuencial – se ejecuta una línea a la vez, y una llamada que tiene que esperar (una lectura de sensor, un viaje de ida y vuelta por la red, una captura) bloquea el script hasta que finaliza. Eso funciona mientras solo hay una cosa que hacer. En el momento en que una aplicación necesita hacer varias cosas a la vez – ejecutar un bucle de captura y responder a un comando serie, y subir fotogramas por la red – un script secuencial se viene abajo. La primera llamada lenta impide que todo lo demás avance.

El módulo asyncio es la respuesta de MicroPython. Permite que la aplicación describa varios trabajos como corrutinas separadas y los ejecute de forma concurrente en un único hilo, cooperativamente – la corrutina que se está ejecutando en cada momento devuelve el control al planificador siempre que tiene que esperar. Un bucle de captura, un lector de UART y un cliente de red pueden vivir todos en el mismo script y las partes lentas de uno ya no congelan a los demás.

Las páginas siguientes cubren las palabras clave async/await y el ciclo de vida de Task, la coordinación mediante gather() y wait_for(), la cancelación y la propagación de excepciones, las tres primitivas de sincronización integradas (Event, Lock, ThreadSafeFlag), los puntos de enganche del lenguaje para integrar clases de aplicación en los modismos de asyncio, un pequeño envoltorio CSI que permite ejecutar snapshot() como corrutina, y los errores comunes que acompañan a la planificación cooperativa.

Control del bucle

Captura de fotogramas

Errores comunes

Resumen