Better graceful shutdown.

This commit is contained in:
Nicolas Patry 2024-04-29 13:22:36 +00:00
parent 007d5e54aa
commit e2ab122843

View File

@ -2,6 +2,7 @@ import asyncio
import os import os
import torch import torch
import time import time
import signal
from grpc import aio from grpc import aio
from loguru import logger from loguru import logger
@ -19,6 +20,21 @@ from text_generation_server.tracing import UDSOpenTelemetryAioServerInterceptor
from text_generation_server.models.idefics_causal_lm import IdeficsCausalLMBatch from text_generation_server.models.idefics_causal_lm import IdeficsCausalLMBatch
class SignalHandler:
KEEP_PROCESSING = True
def __init__(self):
signal.signal(signal.SIGINT, self.exit_gracefully)
signal.signal(signal.SIGTERM, self.exit_gracefully)
def exit_gracefully(self, signum, frame):
print(f"Exiting gracefully: Signal {signum}")
self.KEEP_PROCESSING = False
signal_handler = SignalHandler()
class TextGenerationService(generate_pb2_grpc.TextGenerationServiceServicer): class TextGenerationService(generate_pb2_grpc.TextGenerationServiceServicer):
def __init__( def __init__(
self, self,
@ -231,11 +247,8 @@ def serve(
logger.info("Server started at {}".format(local_url)) logger.info("Server started at {}".format(local_url))
try: while signal_handler.KEEP_PROCESSING:
await server.wait_for_termination() await asyncio.sleep(0.5)
except KeyboardInterrupt:
logger.info("Signal received. Shutting down")
await server.stop(0)
asyncio.run( asyncio.run(
serve_inner( serve_inner(