eventloop: add support for uvloop
Signed-off-by: Eric Callahan <arskine.code@gmail.com>
This commit is contained in:
parent
f99e5b0bea
commit
51f4d4b888
|
@ -22,6 +22,7 @@ from typing import (
|
||||||
Coroutine,
|
Coroutine,
|
||||||
Dict,
|
Dict,
|
||||||
Set,
|
Set,
|
||||||
|
cast
|
||||||
)
|
)
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ..confighelper import ConfigHelper
|
from ..confighelper import ConfigHelper
|
||||||
|
@ -61,8 +62,8 @@ class ShellCommandProtocol(asyncio.subprocess.SubprocessStreamProtocol):
|
||||||
def connection_made(
|
def connection_made(
|
||||||
self, transport: asyncio.transports.BaseTransport
|
self, transport: asyncio.transports.BaseTransport
|
||||||
) -> None:
|
) -> None:
|
||||||
|
transport = cast(asyncio.SubprocessTransport, transport)
|
||||||
self._transport = transport
|
self._transport = transport
|
||||||
assert isinstance(transport, asyncio.SubprocessTransport)
|
|
||||||
stdout_transport = transport.get_pipe_transport(1)
|
stdout_transport = transport.get_pipe_transport(1)
|
||||||
if stdout_transport is not None:
|
if stdout_transport is not None:
|
||||||
self._pipe_fds.append(1)
|
self._pipe_fds.append(1)
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
# This file may be distributed under the terms of the GNU GPLv3 license
|
# This file may be distributed under the terms of the GNU GPLv3 license
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
import os
|
||||||
|
import contextlib
|
||||||
import asyncio
|
import asyncio
|
||||||
import inspect
|
import inspect
|
||||||
import functools
|
import functools
|
||||||
|
@ -21,12 +23,21 @@ from typing import (
|
||||||
Union
|
Union
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_uvl_var = os.getenv("MOONRAKER_ENABLE_UVLOOP", "y").lower()
|
||||||
|
_uvl_enabled = False
|
||||||
|
if _uvl_var in ["y", "yes", "true"]:
|
||||||
|
with contextlib.suppress(ImportError):
|
||||||
|
import uvloop
|
||||||
|
uvloop.install()
|
||||||
|
_uvl_enabled = True
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
_T = TypeVar("_T")
|
_T = TypeVar("_T")
|
||||||
FlexCallback = Callable[..., Optional[Awaitable]]
|
FlexCallback = Callable[..., Optional[Awaitable]]
|
||||||
TimerCallback = Callable[[float], Union[float, Awaitable[float]]]
|
TimerCallback = Callable[[float], Union[float, Awaitable[float]]]
|
||||||
|
|
||||||
class EventLoop:
|
class EventLoop:
|
||||||
|
UVLOOP_ENABLED = _uvl_enabled
|
||||||
TimeoutError = asyncio.TimeoutError
|
TimeoutError = asyncio.TimeoutError
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
|
@ -586,6 +586,7 @@ def main(from_package: bool = True) -> None:
|
||||||
app_args["log_file"] = str(data_path.joinpath("logs/moonraker.log"))
|
app_args["log_file"] = str(data_path.joinpath("logs/moonraker.log"))
|
||||||
app_args["python_version"] = sys.version.replace("\n", " ")
|
app_args["python_version"] = sys.version.replace("\n", " ")
|
||||||
app_args["msgspec_enabled"] = json_wrapper.MSGSPEC_ENABLED
|
app_args["msgspec_enabled"] = json_wrapper.MSGSPEC_ENABLED
|
||||||
|
app_args["uvloop_enabled"] = EventLoop.UVLOOP_ENABLED
|
||||||
log_manager = LogManager(app_args, startup_warnings)
|
log_manager = LogManager(app_args, startup_warnings)
|
||||||
|
|
||||||
# Start asyncio event loop and server
|
# Start asyncio event loop and server
|
||||||
|
|
Loading…
Reference in New Issue