Primeiro, há uma diferença fundamental entre async e threads ou multiprocessamento, mesmo além de como essas coisas são implementadas no Python. Assíncrono é sobre simultaneidadeenquanto tópicos e multiprocessos são sobre paralelismo. A simultaneidade envolve a divisão do tempo com eficiência entre várias tarefas de uma só vez – EG, verificando seu email enquanto aguarda na fila em um registro no supermercado. O paralelismo envolve vários agentes processando várias tarefas lado a lado – com cinco registros separados abertos no supermercado.
Na maioria das vezes, o Async é um bom substituto para a rosqueamento, pois a rosqueamento é implementada no Python. Isso ocorre porque o Python não usa threads do sistema operacional, mas seus próprios threads cooperativos, onde apenas um thread está em execução no intérprete. Em comparação com fios cooperativos, o Async fornece algumas vantagens importantes:
- As funções assíncronas são muito mais leves que os threads. Dezenas de milhares de operações assíncronas em execução imediatamente terão muito menos sobrecarga do que dezenas de milhares de threads.
- A estrutura do código assíncrono facilita a razão sobre onde as tarefas pegam e deixam de lado. Isso significa que as corridas de dados e a segurança dos threads são menos um problema. Como todas as tarefas no loop de eventos assíncronas são executadas em um único thread, é mais fácil para o Python (e o desenvolvedor) serializar como eles acessam objetos na memória.
- As operações assíncronas podem ser canceladas e manipuladas com mais facilidade do que os threads. O
Task
objeto de que voltamosasyncio.create_task()
fornece -nos uma maneira útil de fazer isso.
O multiprocessamento em Python, por outro lado, é o melhor para trabalhos que são fortemente ligados à CPU e não à I/S. O Async realmente trabalha de mãos dadas com multiprocessamento, pois você pode usar asyncio.run_in_executor () para delegar empregos com uso intensivo de CPU a um pool de processos de um processo central, sem bloquear esse processo central.