Compare commits

..

1 Commits

Author SHA1 Message Date
Tyler Goodlet 71cf9e7bd3 First draft, `asyncio`-task, sync-pausing Bo
Mostly due to magic from @oremanj where we slap in a little bit of
`.from_asyncio`-type stuff to run a `trio`-task from `asyncio.Task`
code!

I'm not gonna go into tooo too much detail but basically the primary
thing needed was a way to (blocking-ly) invoke a `trio.lowlevel.Task`
from an `asyncio` one (which we now have with a new
`run_trio_task_in_future()` thanks to draft code from the aforementioned
jefe) which we now invoke from a dedicated aio case-branch inside
`.devx._debug.pause_from_sync()`. Further include a case inside
`DebugStatus.release()` to handle using the same func to set the
`repl_release: trio.Event` from the aio side when releasing the REPL on
exit cmds.

Prolly more refinements to come ;{o
2024-07-15 11:37:17 -04:00
2 changed files with 11 additions and 16 deletions

View File

@ -83,13 +83,15 @@ async def main(
debug_mode=True,
maybe_enable_greenback=True,
# loglevel='devx',
# loglevel='runtime',
) as n:
ptl: Portal = await n.start_actor(
'aio_daemon',
enable_modules=[__name__],
infect_asyncio=True,
debug_mode=True,
# loglevel='cancel',
loglevel='cancel',
)
async with ptl.open_context(

View File

@ -2491,7 +2491,10 @@ def pause_from_sync(
message += (
f'-> called from a root-actor bg {thread}\n'
)
elif is_aio:
message += (
f'-> called from a `asyncio`-task bg {thread}\n'
)
message += (
'-> scheduling `._pause_from_bg_root_thread()`..\n'
)
@ -2513,6 +2516,7 @@ def pause_from_sync(
**_pause_kwargs,
),
),
trio_token=trio.lowlevel.current_trio_token(),
)
DebugStatus.shield_sigint()
message += (
@ -2548,7 +2552,6 @@ def pause_from_sync(
elif is_aio:
greenback: ModuleType = maybe_import_greenback()
repl_owner: Task = asyncio.current_task()
DebugStatus.shield_sigint()
fute: asyncio.Future = run_trio_task_in_future(
partial(
_pause,
@ -2564,7 +2567,6 @@ def pause_from_sync(
**_pause_kwargs
)
)
# TODO: for async version -> `.pause_from_aio()`?
# bg_task, _ = await fute
bg_task, _ = greenback.await_(fute)
@ -2699,7 +2701,8 @@ _crash_msg: str = (
def _post_mortem(
repl: PdbREPL, # normally passed by `_pause()`
# provided and passed by `_pause()`
repl: PdbREPL,
# XXX all `partial`-ed in by `post_mortem()` below!
tb: TracebackType,
@ -3016,17 +3019,7 @@ def open_crash_handler(
yield
except tuple(catch) as err:
if type(err) not in ignore:
# use our re-impl-ed version
_post_mortem(
repl=mk_pdb(),
tb=sys.exc_info()[2],
api_frame=inspect.currentframe().f_back,
)
# XXX NOTE, `pdbp`'s version seems to lose the up-stack
# tb-info?
# pdbp.xpm()
pdbp.xpm()
raise