Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Better asyncio.Task side iface for crash-triggered multi-loop teardown #398

@goodboy

Description

@goodboy

TODO, write this up in better prose!


  • traceback from a modden shutdown crash
[33] > ~/repos/modden/modden/runtime/env.py(891)
 ...
 872         async def wait_for_proc(
 873             self,
 874             spawn: Spawn,
 875         ) -> Proc:
 876             '''
 877             Wait for a spawned program's (root) process to be
 878             published in this runspace; return the `Proc` handle
 879             when avialable.
 880
 881             '''
 882             # NOTE, currently this is contrived but eventually should
 883             # be generalized for the distributed/multihost case!
 884             _spawn = self._sid2spawn.get(spawn.sid)
 885             assert _spawn is spawn
 886
 887             if not spawn.proc:
 888                 from_trio: asyncio.Queue = self.lo_wm._aio_chan._to_aio
 889                 while spawn.proc is None:
 890                     # async for new_spawn, proc in from_trio:
 891  ->                 new_spawn, proc = await from_trio.get()
 892                     if new_spawn.sid == spawn.sid:
 893                         assert spawn.proc is proc
 894                         break
 895
 896             return spawn.proc
(Pdb+) from_trio
<Queue at 0x7f0f96f4f4d0 maxsize=256 tasks=52 shutdown>
(Pdb+)

with stack from asyncio.run() down,

18]   /home/goodboy/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/asyncio/base_events.py(712)run_until_complete()
-> self.run_forever()
[19]   /home/goodboy/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/asyncio/base_events.py(683)run_forever()
-> self._run_once()
[20]   /home/goodboy/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/asyncio/base_events.py(2040)_run_once()
-> handle._run()
[21]   /home/goodboy/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/asyncio/events.py(89)_run()
-> self._context.run(self._callback, *self._args)
[22]   /home/goodboy/repos/i3ipc-python/i3ipc/aio/connection.py(45)handler_coroutine()
-> await handler(conn, data)
[23]   /home/goodboy/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/contextlib.py(100)inner()
-> async with self._recreate_cm():
[24]   /home/goodboy/repos/modden/modden/wm/i3/utils.py(264)__aexit__()
-> return maybe_handle_crash.__exit__(self, *exc)
[25]   /home/goodboy/repos/modden/modden/wm/i3/utils.py(226)__exit__()
-> with maybe_open_crash_handler(
[26]   /home/goodboy/repos/tractor/tractor/devx/debug/_post_mortem.py(411)maybe_open_crash_handler()
-> with rtctx as boxed_maybe_exc:
[27]   /home/goodboy/repos/tractor/tractor/devx/debug/_post_mortem.py(340)open_crash_handler()
-> yield boxed_maybe_exc
[28]   /home/goodboy/repos/tractor/tractor/devx/debug/_post_mortem.py(412)maybe_open_crash_handler()
-> yield boxed_maybe_exc
[29]   /home/goodboy/repos/modden/modden/wm/i3/utils.py(234)__exit__()
-> raise exc_value
[30]   /home/goodboy/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/contextlib.py(101)inner()
-> return await func(*args, **kwds)
[31]   /home/goodboy/repos/modden/modden/wm/i3/api.py(2179)on_win()
-> spawn: Spawn|None = await handlers.init_window_from_spawn(
[32]   /home/goodboy/repos/modden/modden/wm/i3/handlers.py(125)init_window_from_spawn()
-> proc: procs.Proc = await wm.rs.wait_for_proc(spawn)
[33] > /home/goodboy/repos/modden/modden/runtime/env.py(891)wait_for_proc()
-> new_spawn, proc = await from_trio.get()
[34]   /home/goodboy/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/asyncio/queues.py(182)get()
-> raise QueueShutDown

Metadata

Metadata

Assignees

No one assigned

    Labels

    apiasynciocancellationSC teardown semantics and anti-zombie semanticsdevx-tooling"developer experience" improvements as provided `tractor.devx` for runtime dependents.scstructurred concurrency related

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions