Unverified Commit fb213a2f authored by Hongkuan Zhou's avatar Hongkuan Zhou Committed by GitHub
Browse files

feat: graceful shutdown for sglang example (#1764)

parent 8bfc61ac
...@@ -17,6 +17,7 @@ from __future__ import annotations ...@@ -17,6 +17,7 @@ from __future__ import annotations
import asyncio import asyncio
import logging import logging
import signal
import sys import sys
import msgspec import msgspec
...@@ -54,8 +55,26 @@ class DecodeRequestHandler: ...@@ -54,8 +55,26 @@ class DecodeRequestHandler:
yield result yield result
async def graceful_shutdown(runtime):
logging.info("Received shutdown signal, shutting down DistributedRuntime")
runtime.shutdown()
logging.info("DistributedRuntime shutdown complete")
@dynamo_worker(static=False) @dynamo_worker(static=False)
async def worker(runtime: DistributedRuntime): async def worker(runtime: DistributedRuntime):
# Set up signal handler for graceful shutdown
loop = asyncio.get_running_loop()
def signal_handler():
# Schedule the shutdown coroutine instead of calling it directly
asyncio.create_task(graceful_shutdown(runtime))
for sig in (signal.SIGTERM, signal.SIGINT):
loop.add_signal_handler(sig, signal_handler)
logging.info("Signal handlers set up for graceful shutdown")
server_args = parse_sglang_args_inc(sys.argv[1:]) server_args = parse_sglang_args_inc(sys.argv[1:])
await init(runtime, server_args) await init(runtime, server_args)
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
import asyncio import asyncio
import logging import logging
import random import random
import signal
import socket import socket
import sys import sys
from typing import Any, Dict, Optional, Union from typing import Any, Dict, Optional, Union
...@@ -242,8 +243,26 @@ class RequestHandler: ...@@ -242,8 +243,26 @@ class RequestHandler:
pass pass
async def graceful_shutdown(runtime):
logging.info("Received shutdown signal, shutting down DistributedRuntime")
runtime.shutdown()
logging.info("DistributedRuntime shutdown complete")
@dynamo_worker(static=False) @dynamo_worker(static=False)
async def worker(runtime: DistributedRuntime): async def worker(runtime: DistributedRuntime):
# Set up signal handler for graceful shutdown
loop = asyncio.get_running_loop()
def signal_handler():
# Schedule the shutdown coroutine instead of calling it directly
asyncio.create_task(graceful_shutdown(runtime))
for sig in (signal.SIGTERM, signal.SIGINT):
loop.add_signal_handler(sig, signal_handler)
logging.info("Signal handlers set up for graceful shutdown")
server_args = parse_sglang_args_inc(sys.argv[1:]) server_args = parse_sglang_args_inc(sys.argv[1:])
await init(runtime, server_args) await init(runtime, server_args)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment