Saltar para o conteúdo principal
🔒 Modo de pré-visualização. As primeiras quinze aulas de Foundations são grátis; esta é Pro. Inicie um trial de 7 dias para desbloquear o editor, as dicas AI e o resto do programa. Cartão necessário, cancele a qualquer momento no Dashboard.Iniciar trial de 7 dias →
← CursosSenior Deep-DivesModule 1 · Concurrency internals · Recapasyncio.Semaphore para contrapressãopredict26 / 161
+100 XP
Tarefa
📝 **Pergunta:** Preveja o resultado exato. Cinco tarefas (A-E) tentam entrar em \`async with sem\` onde \`sem = Semaphore(2)\`. Eles são agendados por \`reunir\` em ordem. Qual é o pico de contagem durante o voo? Em que ordem eles adquirem e liberam? 📋 Escolha a resposta certa. 💡 **Dica:** Releia a teoria acima se não tiver certeza.
Prevê a saída

Lê o código com atenção

import asyncio

state = {"in_flight": 0, "peak": 0}


async def task(name, sem):
    async with sem:
        state["in_flight"] += 1
        state["peak"] = max(state["peak"], state["in_flight"])
        print(f"acquire:{name}:inflight={state['in_flight']}")
        await asyncio.sleep(0)
        await asyncio.sleep(0)
        state["in_flight"] -= 1
        print(f"release:{name}")


async def main():
    sem = asyncio.Semaphore(2)
    await asyncio.gather(*[task(c, sem) for c in "ABCDE"])
    print(f"peak:{state['peak']}")


asyncio.run(main())

O que o programa vai imprimir? Escreve aqui:

💬 Discussão

Seja o primeiro a fazer uma pergunta ou compartilhar uma dica.
Faça login para entrar na discussão. A leitura é gratuita.
Carregando discussão…