Meaning
Wakes up all coroutines waiting on an asyncio.Condition so they can reacquire the lock and re-check shared state. Solves the lost-signal problem where some waiters might never resume if only a single notify() is issued. Reach for this when a state change is relevant to every blocked task, such as a buffer refill or a shutdown signal.
Primary Function
Concurrency control
Communicative Purpose
Notify every waiter that a condition has changed so they can resume execution.
Pattern
await condition.notify_all()
Core Structure
await ....notify_all()
Função primária
Concurrency control
Propósito comunicativo
Notify every waiter that a condition has changed so they can resume execution.
Situações de gatilho
Producer-consumer pipelines: after adding items to a shared buffer that all consumers should inspect Shutdown signaling: broadcasting a termination flag to every blocked task Barrier synchronization: releasing all participants once the last one arrives
Contextos
asyncio-based applications, producer-consumer pipelines, any code using asyncio.Condition for synchronization.
Padrão
await condition.notify_all()
Estrutura central
await ....notify_all()
Slots de substituição
condition: asyncio.Condition instance
Colocados típicos
- async with condition:
- await condition.wait()
- condition.acquire()
Substituições comuns
- condition.notify() to wake a single waiter
Erros comuns
Calling notify_all() without holding the lock → RuntimeError because the condition protocol requires the caller to own the lock Omitting await before notify_all() → returns a coroutine object that is never awaited, so no waiters are actually woken Using threading.Condition.notify_all() in async code → blocks the event loop because threading primitives are synchronous
Similar / contraste
asyncio.Lock.release() (releases a single lock) vs Condition.notify_all() (wakes all waiters); threading.Condition.notify_all() (blocking)
Interferências
Coming from Python's threading module: calling condition.notify_all() without await returns a coroutine object instead of waking waiters — asyncio.Condition.notify_all() is a coroutine that must be awaited.
Família do chunk
- asyncio.Condition.wait
- asyncio.Condition.notify
- asyncio.Lock
- asyncio.Event
Nuance
Do not use when only a subset of waiters needs to be notified; using notify_all() unnecessarily can cause excess wake‑ups and CPU overhead. Calling notify_all() while holding the lock incurs no extra lock cost, but if no waiters are present the call is a no‑op, so avoid spurious calls in tight loops. If waiters may cancel or timeout after being woken, ensure they re‑check predicates after waking to avoid acting on stale state.
Efeito pragmático
Guarantees that no waiting coroutine is missed, preventing lost signals in concurrent workflows.
Dica de memória
Wake them all: await condition.notify_all()
Nota
Must be called while holding the condition lock (async with condition). If no waiters are present, the call is a no‑op.
Upgrade path
Use asyncio.Queue or asyncio.Event for simpler one‑to‑many signaling when appropriate.
Log in to save chunks.