
Compartilhar:
Tonya é ex-promotora de desenvolvedores Python na Vonage.
Como a comparação entre WSGI e ASGI no Python se assemelha a fazer um bolo
Este artigo foi atualizado por Diana Pham em abril de 2025
Introdução
Se você já ficou confuso com a diferença entre WSGI e ASGI, saiba que não está sozinho! Vamos explicar isso usando uma analogia simples (e deliciosa): fazer um bolo.
O que são WSGI e ASGI?
O WSGI (Web Server Gateway Interface) e o ASGI (Asynchronous Server Gateway Interface) definem como um servidor web em Python se comunica com aplicativos web. Eles ficam entre o servidor web e sua estrutura de Python, processando as solicitações recebidas. No entanto, eles processam as solicitações de maneiras fundamentalmente diferentes.
WSGI v. ASG Iinterface
WSGI: A abordagem tradicional e síncrona
O WSGI processa as solicitações de forma síncrona, o que significa que cada solicitação é tratada uma de cada vez, em ordem. A próxima solicitação precisa aguardar a conclusão da anterior antes de poder ser processada.
Se você já usou Flask, você já se deparou com o WSGI — ele é o padrão da web em Python há anos. No entanto, esse processamento sequencial pode tornar o sistema mais lento, especialmente ao lidar com muitas solicitações simultaneamente.
ASGI: A abordagem moderna e assíncrona
O ASGI, sucessor do WSGI, introduz o processamento assíncrono . Isso significa que várias solicitações podem ser processadas ao mesmo tempo, sem que uma tenha que aguardar a outra.
Talvez você já tenha ouvido falar do novo framework web em Python, FastAPI. Por padrão, ele usa o ASGI, o que o torna extremamente rápido. O FastAPI também é um microframework web com muitas vantagens, incluindo suporte pronto para uso a código assíncrono usando as palavras-chave `async` e `await` do Python!
WSGI x ASGI: a analogia de fazer um bolo
Para entender a diferença entre WSGI e ASGI, imagine que você está preparando uma guloseima para uma festa de aniversário: assando um bolo e fazendo a cobertura do zero. Essas são duas tarefas distintas — ou, em termos da web, duas solicitações.
WSGI: Uma tarefa por vez (processamento síncrono)
Com o WSGI, cada solicitação é processada uma após a outra. Você deve concluir totalmente a primeira tarefa antes de passar para a próxima.
Request 1: Bake Cake
1. Mix the batter
2. Pour it into pans
3. Bake in the oven (30 min wait)
Request 2: Make Frosting
4. Mix butter and powdered sugar
5. Add vanilla and milk
6. Stir until smoothEntão, se o tempo de cozimento for de 30 minutos, você vai ficar esperando um tempão antes mesmo de poder começar fazer a cobertura. Isso é processamento síncrono — sem sobreposição de tarefas, mesmo que você esteja apenas esperando.
Synchronous requests
ASGI: Multitarefa entre solicitações (processamento assíncrono)
Com o ASGI, você pode processar várias solicitações ao mesmo tempo. Se uma estiver em espera (como o bolo no forno), você pode mudar de tarefa e trabalhar em outra.
Request 1: Bake Cake
1. Mix the batter
2. Pour it into pans
3. Put it in the oven (starts baking)
→ Switch to Request 2 while the cake bakes…
Request 2: Make Frosting
4. Mix butter and powdered sugar
5. Add vanilla and milk
6. Stir until smooth
→ Return to Request 1 once the cake is doneEm vez de ficar ocioso, você está aproveitando melhor o seu tempo. O ASGI funciona assim: permitindo que as tarefas sejam pausadas e retomadas, lidando com operações de E/S ou outras operações demoradas sem bloquear todo o resto.
⚠ Observação: Nem todas as tarefas podem ser executadas ao mesmo tempo — algumas dependem da conclusão de outras antes. Por exemplo, não dá para assar um bolo antes de preparar a massa! Da mesma forma, em applications ASGI, certas operações (como uma consulta ao banco de dados ou a leitura de um arquivo) ainda podem exigir execução ordenada.
Asynchronous requestsExemplos de pseudocódigo em Python
Código síncrono no estilo WSGI
def bake_cake(request):
mix_batter()
pour_into_pan()
bake_in_oven() # This blocks for a long time
return response
def make_frosting(request):
mix_ingredients()
stir_until_smooth()
return response
Aqui, make_frosting() nem sequer começará até que bake_cake() terminar. As solicitações são processadas uma de cada vez.
Código síncrono no estilo ASGI
async def bake_cake(request):
await mix_batter()
await pour_into_pan()
await bake_in_oven() # Can yield control here
return response
async def make_frosting(request):
await mix_ingredients()
await stir_until_smooth()
return response
Nesta versão assíncrona, enquanto bake_in_oven() está aguardando, o servidor pode pular essa etapa e executar make_frosting() em vez de ficar ocioso. Esse é o poder do ASGI — multitarefa eficiente e sem bloqueios.
Resumindo tudo
O WSGI é como assar um bolo e ficar parado enquanto ele está no forno. O ASGI permite que você prepare a cobertura nesse meio tempo. Ambos têm seus casos de uso, mas se você precisa de aplicativos web escaláveis e de alto desempenho capazes de lidar com muitas tarefas de forma eficiente, o ASGI é a sua melhor opção.
Tem alguma dúvida ou quer compartilhar o que está criando?
Inscreva-se no Boletim Informativo para Desenvolvedores
Siga-nos no X (antigo Twitter) para ficar por dentro das novidades
Assista aos tutoriais no nosso canal do YouTube
Conecte-se conosco na página de desenvolvedores da Vonage no LinkedIn
Fique conectado e acompanhe as últimas notícias, dicas e eventos para desenvolvedores.