first commit
This commit is contained in:
42
src/app/livekit/compat.py
Normal file
42
src/app/livekit/compat.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from importlib import import_module
|
||||
|
||||
|
||||
def patch_inference_executor_is_alive() -> bool:
|
||||
"""
|
||||
Guard LiveKit's health check against a closed multiprocessing.Process.
|
||||
|
||||
livekit-agents==1.3.10 calls InferenceProcExecutor.is_alive() from the
|
||||
aiohttp health route. After shutdown, multiprocessing raises
|
||||
ValueError("process object is closed"), which turns a normal unhealthy
|
||||
state into a 500.
|
||||
"""
|
||||
|
||||
try:
|
||||
module = import_module("livekit.agents.ipc.inference_proc_executor")
|
||||
except ImportError:
|
||||
return False
|
||||
|
||||
executor_cls = getattr(module, "InferenceProcExecutor", None)
|
||||
if executor_cls is None:
|
||||
return False
|
||||
|
||||
current_is_alive = getattr(executor_cls, "is_alive", None)
|
||||
if current_is_alive is None:
|
||||
return False
|
||||
|
||||
if getattr(current_is_alive, "__tim_closed_process_guard__", False):
|
||||
return False
|
||||
|
||||
def _safe_is_alive(self) -> bool:
|
||||
try:
|
||||
return current_is_alive(self)
|
||||
except ValueError as exc:
|
||||
if str(exc) != "process object is closed":
|
||||
raise
|
||||
return False
|
||||
|
||||
_safe_is_alive.__tim_closed_process_guard__ = True
|
||||
executor_cls.is_alive = _safe_is_alive
|
||||
return True
|
||||
Reference in New Issue
Block a user