Processamento Assíncrono em Python

Processamento Assíncrono em Python

Este artigo explica o processamento assíncrono em Python.

Você pode aprender exemplos de código para o uso básico do async/await e do módulo asyncio do Python.

YouTube Video

Processamento Assíncrono em Python

O processamento assíncrono em Python é um mecanismo para lidar de forma eficiente com operações de E/S demoradas, como leitura e escrita de arquivos ou comunicação em rede. No processamento síncrono, a próxima operação espera até que a atual termine, mas com o processamento assíncrono, você pode continuar com outras tarefas durante o tempo de espera. Em Python, o módulo asyncio é fornecido para realizar o processamento assíncrono. Aqui, explicaremos seus elementos básicos e como usá-los passo a passo.

Sintaxe Básica

No núcleo do processamento assíncrono estão funções chamadas corrotinas. As funções async definem funções assíncronas, e await é usado para aguardar uma tarefa assíncrona dentro dessas funções.

 1import asyncio
 2
 3async def say_hello():
 4    print("Hello")
 5    await asyncio.sleep(1)
 6    print("World")
 7
 8if __name__ == "__main__":
 9    # Execute asynchronous task
10    asyncio.run(say_hello())
  • No código acima, a função say_hello é definida como uma tarefa assíncrona. Ao esperar 1 segundo com sleep(), outras tarefas assíncronas podem ser executadas.

Executando Múltiplas Tarefas

Usando a função gather do módulo asyncio, você pode executar várias tarefas simultaneamente.

 1import asyncio
 2
 3async def task1():
 4    print("Task 1 started")
 5    await asyncio.sleep(2)
 6    print("Task 1 completed")
 7
 8async def task2():
 9    print("Task 2 started")
10    await asyncio.sleep(1)
11    print("Task 2 completed")
12
13async def main():
14    await asyncio.gather(task1(), task2())
15
16if __name__ == "__main__":
17    asyncio.run(main())
  • Neste exemplo, task1 e task2 são executadas simultaneamente. Como resultado, task2 é concluído primeiro entre as duas tarefas, mas o tempo total de execução é igual ao tempo de execução da tarefa mais longa.

Manipulação de Erros

O tratamento de erros é importante mesmo no processamento assíncrono. Você pode capturar e tratar erros usando a sintaxe padrão try-except.

 1import asyncio
 2
 3async def faulty_task():
 4    raise Exception("An error occurred")
 5
 6async def main():
 7    try:
 8        await faulty_task()
 9    except Exception as e:
10        print(f"Caught an error: {e}")
11
12if __name__ == "__main__":
13    asyncio.run(main())
  • Este código demonstra como exceções que ocorrem dentro de funções assíncronas podem ser capturadas com try-except e suas mensagens de erro tratadas de forma segura. A exceção de faulty_task é capturada dentro de main e é exibida adequadamente.

Resumo

O processamento assíncrono em Python usa async / await e asyncio para executar outras tarefas concorrentemente enquanto aguarda operações de E/S, permitindo um processamento mais eficiente. Aproveitando a execução concorrente de múltiplas tarefas e E/S assíncrona, é possível melhorar significativamente o desempenho. Além disso, como você pode lidar com erros assim como com o try-except comum, é possível executar códigos assíncronos com segurança.

Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.

YouTube Video