diff --git a/uvicorn/server.py b/uvicorn/server.py index a3fb31b2b..34cbcbb40 100644 --- a/uvicorn/server.py +++ b/uvicorn/server.py @@ -10,7 +10,7 @@ import time from email.utils import formatdate from types import FrameType -from typing import TYPE_CHECKING, List, Optional, Sequence, Set, Tuple, Union +from typing import TYPE_CHECKING, Any, List, Optional, Sequence, Set, Tuple, Union import click @@ -54,6 +54,7 @@ def __init__(self, config: Config) -> None: self.should_exit = False self.force_exit = False self.last_notified = 0.0 + self.servers: List[Any] = [] def run(self, sockets: Optional[List[socket.socket]] = None) -> None: self.config.setup_event_loop() @@ -112,7 +113,9 @@ def _share_socket( sock_data = sock.share(os.getpid()) # type: ignore[attr-defined] return fromshare(sock_data) - self.servers = [] + # Ensure list does not have stale items if the server is run multiple times. + self.servers.clear() + for sock in sockets: if config.workers > 1 and platform.system() == "Windows": sock = _share_socket( # type: ignore[assignment]