forked from goodboy/tractor
Now supports use from any `trio` task, any sync thread started with
`trio.to_thread.run_sync()` AND also via `breakpoint()` builtin API!
The only bit missing now is support for `asyncio` tasks when in infected
mode.. Bo
`greenback` setup/API adjustments:
- move `._rpc.maybe_import_gb()` to -> `devx._debug` and factor out the cached
import checking into a sync func whilst placing the async `.ensure_portal()`
bootstrapping into a new async `maybe_init_greenback()`.
- use the new init-er func inside `open_root_actor()` with the output
predicating whether we override the `breakpoint()` hook.
core `devx._debug` implementation deatz:
- make `mk_mpdb()` only return the `pdp.Pdb` subtype instance since
the sigint unshielding func is now accessible from the `Lock`
singleton from anywhere.
- add non-main thread support (at least for `trio.to_thread` use cases)
to our `Lock` with a new `.is_trio_thread()` predicate that delegates
directly to `trio`'s internal version.
- do `Lock.is_trio_thread()` checks inside any methods which require
special provisions when invoked from a non-main `trio` thread:
- `.[un]shield_sigint()` methods since `signal.signal` usage is only
allowed from cpython's main thread.
- `.release()` since `trio.StrictFIFOLock` can only be called from
a `trio` task.
- rework `.pause_from_sync()` itself to directly call `._set_trace()`
and don't bother with `greenback._await()` when we're already calling
it from a `.to_thread.run_sync()` thread, oh and try to use the
thread/task name when setting `Lock.local_task_in_debug`.
- make it an RTE for now if you try to use `.pause_from_sync()` from any
infected-`asyncio` task, but support is (hopefully) coming soon!
For testing we add a new `test_debugger.py::test_pause_from_sync()`
which includes a ctrl-c parametrization around the
`examples/debugging/sync_bp.py` script which includes all currently
supported/working usages:
- `tractor.pause_from_sync()`.
- via `breakpoint()` overload.
- from a `trio.to_thread.run_sync()` spawn.
|
||
|---|---|---|
| .. | ||
| asyncio_bp.py | ||
| debug_mode_hang.py | ||
| fast_error_in_root_after_spawn.py | ||
| multi_daemon_subactors.py | ||
| multi_nested_subactors_error_up_through_nurseries.py | ||
| multi_subactor_root_errors.py | ||
| multi_subactors.py | ||
| open_ctx_modnofound.py | ||
| per_actor_debug.py | ||
| restore_builtin_breakpoint.py | ||
| root_actor_breakpoint.py | ||
| root_actor_breakpoint_forever.py | ||
| root_actor_error.py | ||
| root_cancelled_but_child_is_in_tty_lock.py | ||
| root_timeout_while_child_crashed.py | ||
| subactor_bp_in_ctx.py | ||
| subactor_breakpoint.py | ||
| subactor_error.py | ||
| sync_bp.py | ||