diff --git a/uvicorn/supervisors/multiprocess.py b/uvicorn/supervisors/multiprocess.py index 87ce91f15..81fe4ab5e 100644 --- a/uvicorn/supervisors/multiprocess.py +++ b/uvicorn/supervisors/multiprocess.py @@ -1,6 +1,7 @@ import logging import os import signal +import sys import threading from multiprocessing.context import SpawnProcess from socket import socket @@ -42,7 +43,9 @@ def signal_handler(self, sig: int, frame: Optional[FrameType]) -> None: def run(self) -> None: self.startup() - self.should_exit.wait() + while True: + if self.should_exit.wait(self.config.reload_delay): + break self.shutdown() def startup(self) -> None: @@ -64,7 +67,10 @@ def startup(self) -> None: def shutdown(self) -> None: for process in self.processes: - process.terminate() + if sys.platform == "win32": + self.should_exit.set() # pragma: py-not-win32 + else: + process.terminate() # pragma: py-win32 process.join() message = "Stopping parent process [{}]".format(str(self.pid))