【python】 日志打印、垃圾回收

log_utils 打印日志

报错截图

修改后,如下:

python 复制代码
import os  # 新增:用于路径处理

from functools import wraps
import time
import gc  # 新增

# 兼容CuPy/NumPy
try:
    import cupy as xp
except ImportError:
    import numpy as xp


def format_value(val):
    # 1. 处理CuPy/NumPy数组
    if isinstance(val, xp.ndarray):
        # 计算大小
        size_mb = val.nbytes / (1024 ** 2)

        # 关键修改:大数组不切片!
        if size_mb > 100:  # >100MB
            return f"ndarray(dtype={val.dtype}, shape={val.shape}) <{size_mb:.0f}MB>"
        elif val.ndim >= 2:
            return f"ndarray(dtype={val.dtype}, shape={val.shape})"
        else:
            val_str = str(val[:3]).replace('\n', '')
            return f"ndarray(dtype={val.dtype}, shape={val.shape}, val={val_str})"

    # 2. 处理纯数字
    elif isinstance(val, (int, float, complex)):
        return f"{type(val).__name__}({val})"

    # 3. 处理列表/元组
    elif isinstance(val, (list, tuple)):
        formatted_items = [format_value(item) for item in val[:2]]
        return f"{type(val).__name__}(len={len(val)}, items={formatted_items})"

    # 4. 其他类型
    else:
        return f"{type(val).__name__}({str(val)[:50]})"


def auto_log(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        func_name = func.__name__
        start_time = time.strftime('%H:%M:%S')

        # 关键:执行前清理内存
        gc.collect()

        # 格式化入参
        formatted_args = [format_value(arg) for arg in args]
        formatted_kwargs = {k: format_value(v) for k, v in kwargs.items()}

        # 打印开始日志
        print(f"\n[{start_time}] 🚀 {func_name} - 开始执行")
        print(f"   → 入参(args):{formatted_args}")
        print(f"   → 入参(kwargs):{formatted_kwargs}")

        # 执行原方法
        result = func(*args, **kwargs)

        # 格式化返回值
        formatted_result = format_value(result)
        end_time = time.strftime('%H:%M:%S')

        # 打印结束日志
        print(f"[{end_time}] ✅ {func_name} - 完成执行")
        print(f"   → 返回值:{formatted_result}")

        # 关键:执行后清理内存
        gc.collect()

        return result

    return wrapper
相关推荐
狗狗狗狗狗乐啊16 分钟前
搭一个 AI 对话工作台 AChat:从 0 到可用的完整记录(一)
python·react.js·ai编程
qq_25183645718 分钟前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
白猫不黑1 小时前
Python实现简易Web弱口令爆破与防护方案
python·web安全·计算机·网络安全·黑客·信息安全·渗透测试
郑州光合科技余经理1 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
kuuailetianzi1 小时前
Python初识:定位、优势与发展历程
python
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
guoran_shini2 小时前
LLM微调-训练垂类问答模型
python·lora·sft
basketball6162 小时前
Python FastAPI 介绍以及常用方法
python·fastapi·vllm·ai infra
+VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
论文复现现场2 小时前
企业知识库 RAG 用什么模型便宜?GLM-5.3-Flash 长文本 API 实测
python·rag·企业知识库·大模型api·glm-5.3-flash