示例#1
0
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())
示例#2
0
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'
            })
示例#3
0
def main(bind, **kwargs):
    rpc = ExemplaryRPC()
    run_server(rpc, bind)
示例#4
0
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})
示例#5
0
def run_server_a(b_addr):
    run_server(BroadcastClientRPC(b_addr), ['udp://127.0.0.1:7483'])
示例#6
0
def run_server_b(c_addr):
    run_server(BroadcastRPC(), ['udp://127.0.0.1:7482'])