Python Glossary English

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Сообщить о неточности