forked from goodboy/tractor
1
0
Fork 0

Get rid of external teardown trigger because #245 resolves the problem

patch-async-enter-all
overclockworked64 2021-10-22 03:03:41 +02:00
parent 14a7a129bd
commit 3020793415
No known key found for this signature in database
GPG Key ID: 0E4A3AD9DB596812
1 changed files with 3 additions and 8 deletions

View File

@ -17,7 +17,6 @@ async def _enter_and_wait(
mngr: AsyncContextManager[T],
unwrapped: dict[int, T],
all_entered: trio.Event,
teardown_trigger: trio.Event,
) -> None:
'''Open the async context manager deliver it's value
to this task's spawner and sleep until cancelled.
@ -29,18 +28,13 @@ async def _enter_and_wait(
if all(unwrapped.values()):
all_entered.set()
await teardown_trigger.wait()
await trio.sleep_forever()
@acm
async def async_enter_all(
mngrs: Sequence[AsyncContextManager[T]],
teardown_trigger: trio.Event,
) -> AsyncGenerator[tuple[T, ...], None]:
"""This async context manager expects a 'teardown_trigger' from the
outside world which will be used internally to gracefully teardown
individual context managers.
"""
unwrapped = {}.fromkeys(id(mngr) for mngr in mngrs)
all_entered = trio.Event()
@ -52,10 +46,11 @@ async def async_enter_all(
mngr,
unwrapped,
all_entered,
teardown_trigger,
)
# deliver control once all managers have started up
await all_entered.wait()
yield tuple(unwrapped.values())
n.cancel_scope.cancel()