diff --git a/pyproject.toml b/pyproject.toml index a2ac79a2..81c797a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ taskgroup = { version = "*", python = "<3.11", allow-prereleases = true } tomli = { version = "*", python = "<3.11" } trio = { version = ">=0.22.0", optional = true } typing_extensions = { version = "*", python = "<3.11" } -uvloop = { version = "*", markers = "platform_system != 'Windows'", optional = true } +uvloop = { version = ">=0.18", markers = "platform_system != 'Windows'", optional = true } wsproto = ">=0.14.0" [tool.poetry.dev-dependencies] diff --git a/src/hypercorn/asyncio/run.py b/src/hypercorn/asyncio/run.py index a4c80270..93bd7fc5 100644 --- a/src/hypercorn/asyncio/run.py +++ b/src/hypercorn/asyncio/run.py @@ -207,8 +207,6 @@ def uvloop_worker( import uvloop except ImportError as error: raise Exception("uvloop is not installed") from error - else: - asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) app = load_application(config.application_path, config.wsgi_max_body_size) @@ -220,6 +218,7 @@ def uvloop_worker( partial(worker_serve, app, config, sockets=sockets), debug=config.debug, shutdown_trigger=shutdown_trigger, + loop_factory=uvloop.new_event_loop, ) @@ -228,8 +227,9 @@ def _run( *, debug: bool = False, shutdown_trigger: Optional[Callable[..., Awaitable[None]]] = None, + loop_factory: Callable[[], asyncio.AbstractEventLoop] | None = None, ) -> None: - with Runner(debug=debug) as runner: + with Runner(debug=debug, loop_factory=loop_factory) as runner: runner.get_loop().set_exception_handler(_exception_handler) runner.run(main(shutdown_trigger=shutdown_trigger))