Python 3.4+Асинхронное программированиепонятие
asyncio.Event
синхронизация
Флаг для сигнала между задачами: одни ждут await event.wait(), другая вызывает event.set(), и все ожидающие просыпаются разом.
Синтаксис
event = asyncio.Event(); await event.wait(); event.set(); event.clear()
После set() флаг остаётся поднятым: каждый следующий wait() вернётся мгновенно, пока не вызвать clear(), — Event не одноразовый «пинок», а состояние. set() — обычный метод, не корутина, его не ждут через await. Из другого потока set() звать нельзя, это не threading.Event: используйте loop.call_soon_threadsafe(event.set).
Примеры
import asyncio
async def waiter(name, event):
await event.wait()
print(name, 'проснулся')
async def main():
event = asyncio.Event()
tasks = [asyncio.create_task(waiter(n, event)) for n in ('a', 'b')]
await asyncio.sleep(0.01)
event.set()
await asyncio.gather(*tasks) # → a проснулся / b проснулся
print(event.is_set()) # → True — флаг остался поднят
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности