diff --git a/aiomisc/service/uvicorn.py b/aiomisc/service/uvicorn.py index 4b64137f..182a2bd7 100644 --- a/aiomisc/service/uvicorn.py +++ b/aiomisc/service/uvicorn.py @@ -24,6 +24,7 @@ class UvicornService(Service, abc.ABC): __async_required__: Tuple[str, ...] = ( "start", + "stop", "create_application", ) @@ -114,8 +115,11 @@ async def start(self) -> Any: ) if not self.sock: self.sock = config.bind_socket() - server = Server(config) - - self.start_event.set() + self.server = Server(config) + self.serve_task = asyncio.create_task( + self.server.serve(sockets=[self.sock]) + ) - await server.serve(sockets=[self.sock]) + async def stop(self, exception: Optional[Exception] = None) -> None: + self.server.should_exit = True + await self.serve_task