• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Uso da programação assíncrona em Python visando um sistema responsivo e performático

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,481
Баллы
155
Introdução

Com a expansão dos serviços on-line, surge uma demanda cada vez maior por sistemas responsivos, performáticos e de alta capacidade de escalabilidade. O uso da programação assíncrona se mostra muito eficaz na obtenção destes atributos de qualidade durante o desenvolvimento de um software. Este artigo busca mostrar os benefícios e os contrapontos do uso da programação assíncrona em Python em sistemas "I/O-bound" (altamente dependentes de input e output) e outras tarefas que necessitam de execução paralela.

Conceitos de programação assíncrona

Computadores executam softwares de forma sequencial, isto é, uma instrução após a outra. Um software geralmente realiza múltiplas tarefas, e nem sempre faz sentido esperar que uma tarefa termine antes de iniciar a próxima (SKVORTSOV, 2021).

Segundo Skvortsov, a habilidade de um programa de lidar com múltiplas tarefas se chama "concurrency", e é a base para entendermos melhor como a programação assíncrona funciona.

A programação assíncrona se apresenta como um paradigma de controle de fluxo que utiliza técnicas de manejo estratégico de concurrency para criar um ambiente onde tarefas são iniciadas de forma paralela, permitindo com que o sistema continue "escutando" por novas tarefas enquanto executa outras, diferente da programação síncrona tradicional. Com isto, a programação assíncrona otimiza o uso dos recursos do sistema e melhora o tempo de resposta em aplicações que dependem intensamente de operações de entrada e saída (I/O).


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



Segundo o Teorema de CAP, em um sistema distribuído é impossível garantir simultaneamente consistência, disponibilidade e tolerância à partição (BREWER, 2000). Além de melhorar a responsividade, a utilização de técnicas assíncronas permite com que aplicações mantenham sua disponibilidade e funcionem mesmo diante de comunicações lentas ou falhas parciais na rede, sem bloquear a execução de outras tarefas.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



Programação assíncrona em Python

Em Python, segundo a própria documentação da linguagem, temos a biblioteca nativa asyncio como a principal ferramenta para utilização da programação assíncrona. Através dela, podemos ditar "coroutines" utilizando as palavras reservadas async e await.


import asyncio

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

asyncio.run(main())

Aqui, definimos uma função como assíncrona utilizando async e executamos a tarefa assíncrona "asyncio.sleep(1)" com await. Se uma tarefa não for "aguardada", isto é, corretamente identificada com await, a mesma não será executada.

Em um outro exemplo, dessa vez mais aplicado, temos uma função do código-fonte de um chatbot da plataforma "Discord":


import discord
from discord.ext import commands

bot = commands.Bot(command_prefix="!", intents = intents, case_insensitive=True)

@bot.event
async def on_message(self, message):
if "olá" in message.content.lower():
await ctx.send("Olá, como você está?!")

Aqui, importamos discord.py, um wrapper para a API pública da plataforma. Inicializamos o bot na variável "bot" e utilizamos o método "bot.event" como um decorator (wrapper de funções), que permite "ouvirmos" por mensagens dentro da plataforma. Verificamos então se a string "olá" está presente em "message.content.lower()", onde "message" é a mensagem enviada no chat da plataforma.

Importante notar aqui novamente as palavras reservadas async, na declaração da função, inicializando-a como uma função assíncrona e await em "ctx.send", que envia uma mensagem dentro da plataforma se a condição do "if statement" for verdadeira. Dessa forma, esta função roda de maneira não bloqueante, ou seja, não impede a aplicação de executar outras tarefas.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



Benefícios e contrapontos da programação assíncrona

Fica mais claro entender os benefícios da programação assíncrona quando observamos exemplos práticos como a construção de um chatbot, principalmente quando começamos a escalar esses tipos de sistemas. É de suma importância que aplicações dessa natureza continuem disponíveis para receber e executar novas requisições de tarefas sem bloqueios. Em nosso exemplo, receber mensagens dentro da plataforma e reagir de acordo.

Apesar dos benefícios evidentes em termos de responsividade e escalabilidade, a programação assíncrona introduz complexidade no código e dificulta o tratamento de bugs por conta de como a aplicação é executada, exigindo maior planejamento arquitetural e o uso de boas práticas.

Importante ressaltar que em aplicações "CPU-bound", a introdução da programação assíncrona não só não é viável como muitas vezes sobrecarrega a aplicação, gerando um efeito contrário ao esperado.

Conclusão

A programação assíncrona, por sua flexibilidade e eficiência, se tornou uma das ferramentas-chave para a criação de sistemas que necessitam de responsividade e escalabilidade, podendo suportar grandes cargas. Em Python, quando uma função é declarada com a palavra reservada async, ela se torna uma "coroutine", e utilizando técnicas de manejo de "concurrency", pode pausar e retomar sua execução conforme necessário. O operador await é usado para chamar outras "coroutines" e gerenciar operações paralelas de forma eficiente dentro de uma aplicação (SKVORTSOV, 2021).

Referências Bibliográficas

BREWER, Eric A. Towards robust distributed systems (abstract). In: Proceedings of the nineteenth annual ACM symposium on Principles of distributed computing. New York: ACM, 2000. p. 7-10. Disponível em:

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

. Acesso em: 11 maio 2025.

PYTHON SOFTWARE FOUNDATION. asyncio — Asynchronous I/O. Disponível em:

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

. Acesso em: 11 maio 2025.

SKVORTSOV, Victor. Python behind the scenes #12: how async/await works in Python. 24 ago. 2021. Disponível em:

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

. Acesso em: 11 maio 2025.

KOKALKO, Mykola. Using asynchronous programming in Python to improve application performance. The American Journal of Engineering and Technology, [S.l.], v. 6, n. 12, p. 51–58, 2024. Disponível em:

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

. Acesso em: 11 maio 2025.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх Снизу