diff --git a/uvicorn/loops/asyncio.py b/uvicorn/loops/asyncio.py index 9a9ed6495..688bc602a 100644 --- a/uvicorn/loops/asyncio.py +++ b/uvicorn/loops/asyncio.py @@ -6,6 +6,18 @@ def asyncio_setup(reload: bool = False) -> None: # pragma: no cover - if sys.version_info >= (3, 8) and sys.platform == "win32" and reload: - logger.warning("The --reload flag should not be used in production on Windows.") - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + if sys.version_info >= (3, 8) and sys.platform == "win32": + if reload: + logger.warning( + "The --reload flag should not be \ + used in production on Windows." + ) + try: + from asyncio import WindowsSelectorEventLoopPolicy + except ImportError: + logger.error("Can't assign a policy which doesn't exist.") + else: + if not isinstance( + asyncio.get_event_loop_policy(), WindowsSelectorEventLoopPolicy + ): + asyncio.set_event_loop_policy(WindowsSelectorEventLoopPolicy())