Vai al contenuto principale
🔒 Modalità anteprima. Le prime quindici lezioni di Foundations sono gratuite; questa è Pro. Avvia un trial di 7 giorni per sbloccare l'editor, i suggerimenti AI e il resto del programma. Carta richiesta, disdici in qualsiasi momento dalla Dashboard.Avvia trial di 7 giorni →
← CorsiSenior Deep-DivesModule 1 · Concurrency internals · Recapasyncio.Semaforo per contropressionepredict26 / 161
+100 XP
Compito
📝 **Domanda:** Prevedere l'output esatto. Cinque attività (A-E) provano tutte a inserire \`asincrono con sem\` dove \`sem = Semaforo(2)\`. Sono programmati per \`raccolta\` in ordine. Qual è il conteggio massimo in volo? In che ordine acquisiscono e rilasciano? 📋 Scegli la risposta giusta. 💡 **Suggerimento:** Rileggi la teoria sopra se non sei sicuro.
Predici output

Leggi il codice attentamente

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())

Cosa stamperà il programma? Scrivi qui:

💬 Discussione

Sii il primo a fare una domanda o condividere un consiglio.
Accedi per partecipare alla discussione. La lettura è gratuita.
Caricamento discussione…