You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

run_host.py 1.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import asyncio
  2. import signal
  3. import grpc
  4. from agnext.application import HostRuntimeServicer
  5. from agnext.application.protos import agent_worker_pb2_grpc
  6. async def serve(server: grpc.aio.Server) -> None: # type: ignore
  7. await server.start()
  8. print("Server started")
  9. await server.wait_for_termination()
  10. async def main() -> None:
  11. server = grpc.aio.server()
  12. agent_worker_pb2_grpc.add_AgentRpcServicer_to_server(HostRuntimeServicer(), server)
  13. server.add_insecure_port("[::]:50051")
  14. # Set up signal handling for graceful shutdown
  15. loop = asyncio.get_running_loop()
  16. shutdown_event = asyncio.Event()
  17. def signal_handler() -> None:
  18. print("Received exit signal, shutting down gracefully...")
  19. shutdown_event.set()
  20. loop.add_signal_handler(signal.SIGINT, signal_handler)
  21. loop.add_signal_handler(signal.SIGTERM, signal_handler)
  22. # Start server in background task
  23. serve_task = asyncio.create_task(serve(server))
  24. # Wait for the signal to trigger the shutdown event
  25. await shutdown_event.wait()
  26. # Graceful shutdown
  27. await server.stop(5) # 5 second grace period
  28. await serve_task
  29. print("Server stopped")
  30. if __name__ == "__main__":
  31. import logging
  32. logging.basicConfig(level=logging.WARNING)
  33. logging.getLogger("agnext").setLevel(logging.DEBUG)
  34. try:
  35. asyncio.run(main())
  36. except KeyboardInterrupt:
  37. print("Server shutdown interrupted.")