Você ainda não é assinante?

Nos últimos 10 anos a programação assíncrona não bloqueante tem ganhado destaque no mercado de desenvolvimento por conta da diferença de performance entre tecnologias que possuem esse recurso, como Node.JS, e as que não possuem. Dado esse cenário, a comunidade Python demonstrou interesse no assunto de programação assíncrona não bloqueante e no ano de 2012 a biblioteca asyncio foi introduzida ao core da linguagem com a PEP 3156.

A biblioteca asyncio fornece à linguagem recursos para a criação de código concorrente sem precisar recorrer ao uso de múltiplas threadings, utilizando event loops em seu lugar, utilizando uma sintaxe fácil de entender a primeira vista:

import asyncio

async def ola_mundo():
   print('Olá ...')
   await asyncio.sleep(1)
   print('... Mundo!')

asyncio.run(ola_mundo())

No código acima vemos a declaração de uma co-rotina, função assíncrona que utiliza do par declarativo async/await para determinar seu comportamento, onde async indica que se trata de uma função não bloqueante e await indica que a função deverá esperar o a execução da linha em segundo plano sem bloquear o resto da aplicação. A partir da versão 3.7 do Python é possível executar uma co-rotina através do método asyncio.run().

A biblioteca asyncio fornece um conjunto de APIs de alto e baixo nível para a execução de co-rotinas paralelamente tendo total controle sobre sua execução, realizar operações de entrada e saída de rede e IPC, ter controle sobre subprocessos, utilizar filas para distribuir tarefas, sincronizar código que está executando de forma assíncrona.

Saiba mais Veja a Série Primeiros passos no Python