import trio import tractor async def sleepy_jane() -> None: uid: tuple = tractor.current_actor().uid print(f'Yo i am actor {uid}') await trio.sleep_forever() async def main(): ''' Spawn a flat actor cluster, with one process per detected core. ''' portal_map: dict[str, tractor.Portal] # look at this hip new syntax! async with ( tractor.open_actor_cluster( modules=[__name__] ) as portal_map, trio.open_nursery( strict_exception_groups=False, ) as tn, ): for (name, portal) in portal_map.items(): tn.start_soon( portal.run, sleepy_jane, ) await trio.sleep(0.5) # kill the cluster with a cancel raise KeyboardInterrupt if __name__ == '__main__': try: trio.run(main) except KeyboardInterrupt: print('trio cancelled by KBI')