mirror of
https://github.com/microsoft/autogen.git
synced 2025-07-13 03:50:51 +00:00

* Python host runtime impl * update * ignore proto generated files * move worker runtime to application * Move example to samples * Fix import * fix * update * server client * better shutdown * fix doc conf * add type
54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
import asyncio
|
|
import signal
|
|
|
|
import grpc
|
|
from agnext.application import HostRuntimeServicer
|
|
from agnext.application.protos import agent_worker_pb2_grpc
|
|
|
|
|
|
async def serve(server: grpc.aio.Server) -> None: # type: ignore
|
|
await server.start()
|
|
print("Server started")
|
|
await server.wait_for_termination()
|
|
|
|
|
|
async def main() -> None:
|
|
server = grpc.aio.server()
|
|
agent_worker_pb2_grpc.add_AgentRpcServicer_to_server(HostRuntimeServicer(), server)
|
|
server.add_insecure_port("[::]:50051")
|
|
|
|
# Set up signal handling for graceful shutdown
|
|
loop = asyncio.get_running_loop()
|
|
|
|
shutdown_event = asyncio.Event()
|
|
|
|
def signal_handler() -> None:
|
|
print("Received exit signal, shutting down gracefully...")
|
|
shutdown_event.set()
|
|
|
|
loop.add_signal_handler(signal.SIGINT, signal_handler)
|
|
loop.add_signal_handler(signal.SIGTERM, signal_handler)
|
|
|
|
# Start server in background task
|
|
serve_task = asyncio.create_task(serve(server))
|
|
|
|
# Wait for the signal to trigger the shutdown event
|
|
await shutdown_event.wait()
|
|
|
|
# Graceful shutdown
|
|
await server.stop(5) # 5 second grace period
|
|
await serve_task
|
|
print("Server stopped")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.WARNING)
|
|
logging.getLogger("agnext").setLevel(logging.DEBUG)
|
|
|
|
try:
|
|
asyncio.run(main())
|
|
except KeyboardInterrupt:
|
|
print("Server shutdown interrupted.")
|