https://a.storyblok.com/f/270183/55205/ae9b04a9a0/flask-vs-fastapi_2.png

Como a comparação entre WSGI e ASGI no Python se assemelha a fazer um bolo

Publicado em November 16, 2021

Tempo de leitura: 4 minutos

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.

Visual of the flow of the interface being used with a laptop at the start and an arrow pointing to a web server pointing to a WSGI or ASGI to a web applicationWSGI 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 smooth

Entã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.

Three horizontal bars labeled A, B, and C, arranged diagonally downward from left to right. Bar A is magenta and positioned at the top left. Bar B is light blue and placed slightly lower and to the right of A. Bar C is orange, the longest of the three, located at the bottom right. Each bar has its corresponding label above it in magenta text.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 done

Em 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.

Three horizontal bars labeled A, B, and C, stacked vertically. Bar A is magenta and the longest, starting furthest to the left. Bar B is light blue and shorter, positioned slightly to the right of A. Bar C is orange and wider than B, starting further right than both A and B. Each bar has its label (A, B, C) above or beside it in magenta text.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?

Fique conectado e acompanhe as últimas notícias, dicas e eventos para desenvolvedores.

Compartilhar:

https://a.storyblok.com/f/270183/400x401/df70d85a84/tonya-sims-1.png
Tonya SimsEx-funcionários da Vonage

Tonya é ex-promotora de desenvolvedores Python na Vonage.