Skip to content

Commit

Permalink
Override default asyncio event loop with reload only on Windows (#1257)
Browse files Browse the repository at this point in the history
* Override default asyncio loop with reload only

* shortened warning

* Added type hints for keyword arguments

* Changed to explicit reload keyword argument for loop setups
  • Loading branch information
jammer87 committed Nov 24, 2021
1 parent 0dcfc02 commit 81802ce
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 7 deletions.
2 changes: 1 addition & 1 deletion uvicorn/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ def load(self) -> None:
def setup_event_loop(self) -> None:
loop_setup: Optional[Callable] = import_from_string(LOOP_SETUPS[self.loop])
if loop_setup is not None:
loop_setup()
loop_setup(reload=self.reload)

def bind_socket(self) -> socket.socket:
logger_args: List[Union[str, int]]
Expand Down
8 changes: 6 additions & 2 deletions uvicorn/loops/asyncio.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import asyncio
import logging
import sys

logger = logging.getLogger("uvicorn.error")

def asyncio_setup() -> None: # pragma: no cover
if sys.version_info >= (3, 8) and sys.platform == "win32":

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())
6 changes: 3 additions & 3 deletions uvicorn/loops/auto.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
def auto_loop_setup() -> None:
def auto_loop_setup(reload: bool = False) -> None:
try:
import uvloop # noqa
except ImportError: # pragma: no cover
from uvicorn.loops.asyncio import asyncio_setup as loop_setup

loop_setup()
loop_setup(reload=reload)
else: # pragma: no cover
from uvicorn.loops.uvloop import uvloop_setup

uvloop_setup()
uvloop_setup(reload=reload)
2 changes: 1 addition & 1 deletion uvicorn/loops/uvloop.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
import uvloop


def uvloop_setup() -> None:
def uvloop_setup(reload: bool = False) -> None:
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())

0 comments on commit 81802ce

Please sign in to comment.