diff --git a/backend/app/admin/api/v1/monitor/server.py b/backend/app/admin/api/v1/monitor/server.py index 334cb1f6..becdae51 100644 --- a/backend/app/admin/api/v1/monitor/server.py +++ b/backend/app/admin/api/v1/monitor/server.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- from fastapi import APIRouter, Depends +from starlette.concurrency import run_in_threadpool from backend.common.response.response_schema import ResponseModel, response_base from backend.common.security.jwt import DependsJwtAuth @@ -20,10 +21,11 @@ ) async def get_server_info() -> ResponseModel: data = { - 'cpu': server_info.get_cpu_info(), - 'mem': server_info.get_mem_info(), - 'sys': server_info.get_sys_info(), - 'disk': server_info.get_disk_info(), - 'service': server_info.get_service_info(), + # 扔到线程池,避免阻塞 + 'cpu': await run_in_threadpool(server_info.get_cpu_info), + 'mem': await run_in_threadpool(server_info.get_mem_info), + 'sys': await run_in_threadpool(server_info.get_sys_info), + 'disk': await run_in_threadpool(server_info.get_disk_info), + 'service': await run_in_threadpool(server_info.get_service_info), } return response_base.success(data=data) diff --git a/backend/utils/server_info.py b/backend/utils/server_info.py index ee1374a9..7e94b08d 100644 --- a/backend/utils/server_info.py +++ b/backend/utils/server_info.py @@ -51,7 +51,7 @@ def fmt_timedelta(td: timedelta) -> str: @staticmethod def get_cpu_info() -> dict: """获取 CPU 信息""" - cpu_info = {'usage': round(psutil.cpu_percent(interval=1, percpu=False), 2)} # % + cpu_info = {'usage': round(psutil.cpu_percent(percpu=False), 2)} # % # 检查是否是 Apple M系列芯片 if platform.system() == 'Darwin' and 'arm' in platform.machine().lower(): @@ -101,7 +101,12 @@ def get_sys_info() -> dict: ip = sk.getsockname()[0] except socket.gaierror: ip = '127.0.0.1' - return {'name': socket.gethostname(), 'ip': ip, 'os': platform.system(), 'arch': platform.machine()} + return { + 'name': socket.gethostname(), + 'ip': ip, + 'os': platform.system(), + 'arch': platform.machine(), + } @staticmethod def get_disk_info() -> List[dict]: