Есть ли простой способ корректно завершить работу сервера python grpc? - PullRequest
0 голосов
/ 16 октября 2019

Здесь - это блог, объясняющий, как изящно завершить работу GRPC-сервера в kotlin.

Это единственный способ сделать это? Считать живые звонки и обрабатывать SIGTERM вручную? Это должно было быть нормальное поведение.

Я не мог найти, как считать живые звонки в Python. Может кто-нибудь указать мне документы, которые помогут?

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Оказывается, есть простой способ вместо подсчета RPC, вот как я это сделал:

server = grpc.server(futures.ThreadPoolExecutor(max_workers=100))
{} = {}Impl()
add_{}Servicer_to_server({}, server)
server.add_insecure_port('[::]:' + port)
server.start()
logger.info('Started server at ' + port)
done = threading.Event()
def on_done(signum, frame):
    logger.info('Got signal {}, {}'.format(signum, frame))
    done.set()
signal.signal(signal.SIGTERM, on_done)
done.wait()
logger.info('Stopped RPC server, Waiting for RPCs to complete...')
server.stop(NUM_SECS_TO_WAIT).wait()
logger.info('Done stopping server')
0 голосов
/ 28 октября 2019

gRPC Серверы Python имеют (новый) метод для этого . Просто позвоните server.wait_for_termination()

...