From b06d4b023e6bc9b27b1553b3d4505ce9d6707853 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Thu, 23 Jul 2020 13:32:29 -0400 Subject: [PATCH] Add support for "debug mode" When enabled a crashed actor will connect to the parent with `pdb` in post mortem mode. --- tractor/__init__.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tractor/__init__.py b/tractor/__init__.py index ea61d88..5450cbc 100644 --- a/tractor/__init__.py +++ b/tractor/__init__.py @@ -18,6 +18,7 @@ from ._actor import Actor, _start_actor, Arbiter from ._trionics import open_nursery from ._state import current_actor from ._exceptions import RemoteActorError, ModuleNotExposed +from ._debug import breakpoint, post_mortem from . import msg from . import _spawn @@ -103,14 +104,26 @@ def run( # https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods # OR `trio_run_in_process` (the new default). start_method: Optional[str] = None, + debug_mode: bool = False, **kwargs, ) -> Any: """Run a trio-actor async function in process. This is tractor's main entry and the start point for any async actor. """ + # mark top most level process as root actor + _state._runtime_vars['_is_root'] = True + if start_method is not None: _spawn.try_set_start_method(start_method) + + if debug_mode: + _state._runtime_vars['_debug_mode'] = True + + # expose internal debug module to every actor allowing + # for use of ``await tractor.breakpoint()`` + kwargs.setdefault('rpc_module_paths', []).append('tractor._debug') + return trio.run(_main, async_fn, args, kwargs, arbiter_addr, name)