Files
kefu/wechat_rpa/.venv/Lib/site-packages/websockets/trio/utils.py
T
2026-09-21 10:34:06 +08:00

37 lines
956 B
Python

import trio
__all__ = ["race_events"]
# Based on https://trio.readthedocs.io/en/stable/reference-core.html#custom-supervisors
async def jockey(event: trio.Event, cancel_scope: trio.CancelScope) -> None:
await event.wait()
cancel_scope.cancel()
async def race_events(*events: trio.Event) -> None:
"""
Wait for any of the given events to be set.
Args:
*events: The events to wait for.
"""
if not events:
raise ValueError("no events provided")
try:
async with trio.open_nursery() as nursery:
for event in events:
nursery.start_soon(jockey, event, nursery.cancel_scope)
except BaseExceptionGroup as exc:
try:
trio._util.raise_single_exception_from_group(exc)
except trio._util.MultipleExceptionError:
raise AssertionError(
"race_events should be canceled; please file a bug report"
) from exc