使用 RichProgressLogger 高效管理任务进度
在日常开发中,任务进度的可视化对于复杂的工作流尤为重要。这篇博客将介绍如何使用 RichProgressLogger
实现基于命令行的进度日志管理。
效果展示:
1. RichProgressLogger 的功能简介
RichProgressLogger
是一个基于 Rich 库的进度日志管理工具,提供以下主要功能:
- 进度条更新:实时更新任务进度。
- 日志记录:记录信息、警告、错误和成功消息。
- 子任务管理:支持嵌套子任务。
核心代码在 rich_progress_logger.py
文件中实现。
2. 代码结构分析
2.1 抽象基类 ProgressLogger
ProgressLogger
定义了日志管理器的接口,确保所有子类都实现以下方法:
__call__
:更新任务进度。dispose
:释放资源。child
:创建子任务。error
/warning
/info
/success
:日志记录方法。
from abc import ABC, abstractmethod
class ProgressLogger(ABC):
@abstractmethod
def __call__(self, completed: int, total: int, description: str = "") -> None:
pass
@abstractmethod
def dispose(self) -> None:
pass
@abstractmethod
def child(self, prefix: str, transient: bool = True) -> "ProgressLogger":
pass
@abstractmethod
def error(self, message: str) -> None:
pass
@abstractmethod
def warning(self, message: str) -> None:
pass
@abstractmethod
def info(self, message: str) -> None:
pass
@abstractmethod
def success(self, message: str) -> None:
pass
2.2 RichProgressLogger 实现
RichProgressLogger
继承自 ProgressLogger
,通过 Rich 库实现了上述功能。
- 进度条更新:通过
Progress
对象动态更新任务状态。 - 子任务管理:支持嵌套显示子任务。
- 日志记录:使用 Rich 的格式化输出功能高亮显示日志。
class RichProgressLogger(ProgressLogger):
def __init__(self, prefix: str, parent: "RichProgressLogger" = None, transient: bool = True) -> None:
# 初始化逻辑省略
def __call__(self, completed: int, total: int, description: str = "") -> None:
# 进度条更新逻辑
def dispose(self) -> None:
# 释放资源逻辑
def child(self, prefix: str