Apéndice C. Algo completamente diferente: Async

Nuestros dos primeros apéndices eran para programadores principiantes, pero éste es para los que están un poco avanzados.

Como la mayoría de los lenguajes de programación, Python es síncrono. Recorre el código linealmente, una línea cada vez, de arriba abajo. Cuando llamas a una función, Python salta a su código, y el que llama espera a que la función regrese antes de reanudar lo que estaba haciendo.

Tu CPU sólo puede hacer una cosa a la vez, por lo que la ejecución sincrónica tiene mucho sentido. Pero resulta que a menudo un programa no está ejecutando realmente ningún código, sino esperando algo, como datos de un archivo o de un servicio de red. Esto es como si estuviéramos mirando fijamente la pantalla de un navegador mientras esperamos a que se cargue un sitio. Si pudiéramos evitar esta "espera ocupada", podríamos acortar el tiempo total de nuestros programas. A esto también se le llama mejorar el rendimiento.

En el Capítulo 15, viste que si querías algo de concurrencia, tus opciones incluían hilos, procesos o una solución de terceros como gevent o twisted. Pero ahora hay un número creciente de respuestas asíncronas, tanto incorporadas a Python como soluciones de terceros. Éstas coexisten con el código síncrono habitual de Python, pero, tomando prestada una advertencia de los Cazafantasmas, no puedes cruzar los flujos. Te mostraré cómo evitar cualquier efecto secundario ectoplásmico.

Coroutines y bucles de eventos

En Python ...

Get Introducción a Python, 2ª Edición now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.