Przejdź do treści głównej
🔒 Tryb podglądu. Pierwszych piętnaście lekcji Foundations jest darmowych; ta jest Pro. Rozpocznij 7-dniowy trial, aby odblokować edytor, podpowiedzi AI i resztę kursu. Wymagana karta, anulujesz w dowolnym momencie w Dashboard.Rozpocznij 7-dniowy trial →
← KursySenior Deep-DivesModule 8 · Async correctness patternsasyncio.Event — one-shot broadcast that stays setpredict131 / 161
+150 XP
Zadanie
📝 **Zadanie:** Przewiduj dokładny wynik, w podanej kolejności. Trzej pracownicy czekają na to samo wydarzenie. Po dwóch taktach planowania (aby wszyscy trzej pracownicy osiągnęli „await event.wait()”), główna współprogram ustawia zdarzenie. Wszyscy pracownicy strzelają według kolejności poddania się. Następnie pojawia się SPÓŹNIONY kelner — wydarzenie jest nadal ustawione, więc następuje natychmiast. 📋 Zaimplementuj powyższą funkcję. Testy uruchamiają się automatycznie. 💡 **Wskazówka:** Jeśli utkniesz, przeczytaj ponownie teorię.
Przewiduj wynik

Przeczytaj kod uważnie

import asyncio


events: list[str] = []


async def worker(ready: asyncio.Event, name: str) -> None:
    events.append(f"{name} waiting")
    await ready.wait()
    events.append(f"{name} go")


async def main() -> None:
    ready = asyncio.Event()

    w1 = asyncio.create_task(worker(ready, "w1"))
    w2 = asyncio.create_task(worker(ready, "w2"))
    w3 = asyncio.create_task(worker(ready, "w3"))

    # Two scheduling ticks so all 3 workers reach their await ready.wait().
    await asyncio.sleep(0)
    await asyncio.sleep(0)

    events.append("setting event")
    ready.set()

    await asyncio.gather(w1, w2, w3)

    # Late waiter — event stays set, so this never blocks.
    events.append("late waiter")
    await ready.wait()
    events.append("late waiter past")

    print(f"event set: {ready.is_set()}")
    for e in events:
        print(e)


asyncio.run(main())

Co wypisze program? Napisz tutaj:

💬 Dyskusja

Zadaj pierwsze pytanie lub podziel się wskazówką.
Zaloguj się aby dołączyć do dyskusji. Czytanie jest darmowe.
Ładowanie dyskusji…