def server_main_new(factory_fn, addrs, *args, **kwargs): logging.getLogger(__name__ + '.server_main').debug('%s %s %s %s', factory_fn, addrs, args, kwargs) try: tp, rpc = factory_fn(*args, **kwargs) run_server(tp, rpc, addrs) finally: logging.getLogger('server_main').exception('Exited with: %s %s', factory_fn, sys.exc_info())
def worker_inst(logger_config: LoggerSetup, fn: WorkerCallable, unix_url: str): def sigint_handler(code, frame): stack_list = traceback.StackSummary.extract( traceback.walk_stack(frame), limit=None, capture_locals=True, ) stack_list.reverse() for f, x in zip(stack_list, traceback.format_list(stack_list)): locs = None if hasattr(f, 'locals'): locs = f.locals xs = x.split('\n') if len(xs) and xs[-1] == '': xs = xs[:-1] for y in xs: logging.getLogger('traceback').error('%s', y) # logging.getLogger('traceback.locals').error('%s', locs) with ExitStack() as es: stacks = [ logging_setup(logger_config), circuitbreaker(main_logger='broker'), signal_context(signals=(SIGINT, ), handler=sigint_handler) ] for stack in stacks: es.enter_context(stack) logging.getLogger('worker_inst').info(f'Start %s', unix_url) # use the callable's type hints in order to serialize and deserialize parameters cls_req, cls_res = get_func_types(fn) should_inst = False try: run_server(WorkerForkInst, WorkerForkInst(), {DEFAULT_GROUP: unix_url}) except ForkException: should_inst = True if should_inst: run_server(WorkerInst[cls_req, cls_res], WorkerInst(fn), { DEFAULT_GROUP: unix_url, BACKEND: 'unix://#bind' })
def main(bind, **kwargs): rpc = ExemplaryRPC() run_server(rpc, bind)
def worker_thread_main(fn, unix_url: str): cls_req, cls_res = get_func_types(fn) run_server(WorkerThreadInst[cls_req, cls_res], WorkerThreadInst(fn), {DEFAULT_GROUP: unix_url})
def run_server_a(b_addr): run_server(BroadcastClientRPC(b_addr), ['udp://127.0.0.1:7483'])
def run_server_b(c_addr): run_server(BroadcastRPC(), ['udp://127.0.0.1:7482'])