import tractor async def name_error(): "Raise a ``NameError``" getattr(doggypants) async def spawn_error(): """"A nested nursery that triggers another ``NameError``. """ async with tractor.open_nursery() as n: portal = await n.run_in_actor('name_error_1', name_error) return await portal.result() async def main(): """The main ``tractor`` routine. The process tree should look as approximately as follows: python examples/debugging/multi_subactors.py ├─ python -m tractor._child --uid ('name_error', 'a7caf490 ...) `-python -m tractor._child --uid ('spawn_error', '52ee14a5 ...) `-python -m tractor._child --uid ('name_error', '3391222c ...) """ async with tractor.open_nursery() as n: # spawn both actors portal = await n.run_in_actor('name_error', name_error) portal1 = await n.run_in_actor('spawn_error', spawn_error) # trigger a root actor error assert 0 # attempt to collect results (which raises error in parent) # still has some issues where the parent seems to get stuck await portal.result() await portal1.result() if __name__ == '__main__': tractor.run(main, debug_mode=True)