一个功能丰富、彩色显示、支持多线程/多进程的任务进度条库。让您的循环处理过程一目了然!
Project description
皛鲸任务进度条 (TaskBar)
一个功能丰富、彩色显示、支持多线程/多进程的任务进度条库。让您的循环处理过程一目了然!
✨ 特性
- 🎨 彩色输出 - 支持ANSI彩色显示,进度信息层次分明
- 📊 丰富的进度信息 - 显示百分比、完成数量、当前处理值
- ⏱️ 完整的时间统计 - 平均耗时、最后一次耗时、已用时间、预计结束时间
- 🔒 线程安全 - 支持多线程环境下的安全更新
- 🔄 进程安全 - 支持多进程环境下的安全更新(通过共享内存)
- 🎯 灵活的使用方式 - 支持迭代器模式和手动更新模式
- 📝 可自定义打印 - 支持自定义打印函数,方便集成到不同环境
🚀 快速安装
pip install taskbar
📖 基本使用
1. 最简单的使用方式
import time
from taskbar import TaskBar
# 直接包装可迭代对象
for i in TaskBar(range(100), "处理数据"):
time.sleep(0.01) # 模拟耗时操作
2. 使用便利函数
import time
from taskbar import TaskBar
# 使用taskbar便利函数
for i in TaskBar(range(50), n_desc="批量处理", n_interval=0.5):
time.sleep(0.02)
3. 处理复杂数据结构
import time
from taskbar import TaskBar
# 处理列表中的元组数据,会自动提取第一个元素显示
data = [(i, f"item_{i}", f"value_{i}") for i in range(20)]
for item in TaskBar(data, "处理元组数据", n_interval=0.3):
time.sleep(0.05)
# item 是原始数据,可以正常使用
print(f"\n 处理: {item}", end="")
🎯 高级用法
手动更新模式(适用于多线程)
import time
import threading
from taskbar import TaskBar
def worker(taskbar, worker_id):
"""工作线程函数"""
for i in range(5):
time.sleep(0.1)
taskbar.update() # 手动更新进度
taskbar.val = f"worker-{worker_id}-{i}" # 设置当前处理的值
# 创建TaskBar实例,不传入迭代器
tb = TaskBar(n_desc="多线程处理", n_total=20)
# 启动多个线程
threads = []
for i in range(4):
t = threading.Thread(target=worker, args=(tb, i))
t.start()
threads.append(t)
# 等待所有线程完成
for t in threads:
t.join()
print("\n所有线程完成!")
进程安全模式
import time
import multiprocessing
from taskbar import TaskBar
def worker_process(taskbar, process_id):
"""工作进程函数"""
for i in range(3):
time.sleep(0.2)
taskbar.update() # 进程安全地更新
taskbar.val = f"process-{process_id}-{i}"
if __name__ == "__main__":
# 启用进程安全模式
tb = TaskBar(
n_desc="多进程处理",
n_total=12,
n_interval=0.5,
n_process=True # 启用进程安全
)
processes = []
for i in range(4):
p = multiprocessing.Process(target=worker_process, args=(tb, i))
p.start()
processes.append(p)
for p in processes:
p.join()
print("\n所有进程完成!")
自定义打印函数
import time
from taskbar import TaskBar
def custom_print(message):
"""自定义打印函数,可以重定向到日志文件等"""
with open("progress.log", "a", encoding="utf-8") as f:
f.write(message + "\n")
# 同时也在控制台显示
print(message, end="", flush=True)
# 使用自定义打印函数
for i in TaskBar(
range(30),
n_desc="带日志记录",
n_interval=0.2,
n_print=custom_print
):
time.sleep(0.03)
禁用彩色输出
import time
from taskbar import TaskBar
# 在不支持ANSI颜色的环境中禁用彩色输出
for i in TaskBar(range(20), "无彩色模式", n_interval=0.2, n_color=False):
time.sleep(0.05)
📊 输出示例
当使用彩色模式时,进度条会显示:
处理数据|████████░░░░░░░░░░░░|50/100(50.00%) <current_value> avg:[0.12] last:[0.10] use:[0:00:06] end:[2023-01-01 10:00:00 -> 2023-01-01 10:00:06 -> 2023-01-01 10:00:12]
信息说明:
- 处理数据 - 任务描述(青色)
- |████...| - 进度条(绿色)
- 50/100(50.00%) - 完成数量和百分比(蓝色)
- <current_value> - 当前处理的值(如果提供)
- avg:[0.12] - 平均每次耗时
- last:[0.10] - 最后一次耗时
- use:[0:00:06] - 已用时间
- end:[...] - 开始时间、当前时间、预计结束时间
🔧 API 参考
TaskBar 类
构造函数参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
n_iter |
Iterable | None | 可迭代对象,如果为None则使用手动更新模式 |
n_desc |
str | "" | 任务描述 |
n_interval |
float | 1.0 | 打印间隔(秒) |
n_width |
int | 20 | 进度条宽度(字符数) |
n_print |
Callable | None | 自定义打印函数 |
n_color |
bool | True | 是否使用彩色输出 |
n_total |
int | None | 总任务数,覆盖从iteration获取的长度 |
n_thread |
bool | True | 是否线程安全 |
n_process |
bool | False | 是否进程安全 |
方法
update(n=1)- 手动更新进度__iter__()- 使对象可迭代__next__()- 获取下一个元素
taskbar 便利函数
from taskbar import taskbar
taskbar(
iteration=None,
desc="",
interval=1.0,
width=32,
use_color=True,
total=None,
thread_safe=True,
process_safe=False
)
返回一个配置好的 TaskBar 实例。
⚠️ 注意事项
- 线程/进程安全:在多线程/多进程环境中,建议启用对应的安全模式
- 总任务数:如果提供了可迭代对象且有
__len__方法,会自动获取总任务数 - 当前值显示:如果迭代元素是元组/列表,会自动显示第一个元素;如果元素太长(>50字符)则不显示
- 性能影响:进度条打印会有轻微的性能开销,建议根据任务耗时调整
interval参数
📝 许可证
本项目采用 MIT 许可证。
🤝 贡献
欢迎提交Issue和Pull Request!
📧 联系
作者:皛鲸 (lqxnjk@qq.com)
如果这个库对你有帮助,请给个Star⭐吧!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
taskbar-1.0.3.tar.gz
(5.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file taskbar-1.0.3.tar.gz.
File metadata
- Download URL: taskbar-1.0.3.tar.gz
- Upload date:
- Size: 5.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16f175fdf4d32b0821ed5e7944d30cdf85c41a6ce921cdb9c0d72101792137ce
|
|
| MD5 |
56e97dde97b3b0749bc016857cd7f792
|
|
| BLAKE2b-256 |
cd5a54baaf503bcee0f43d634665ff65ac7c5496055c56b1210e6f778b55b1cb
|
File details
Details for the file taskbar-1.0.3-py3-none-any.whl.
File metadata
- Download URL: taskbar-1.0.3-py3-none-any.whl
- Upload date:
- Size: 4.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07c1cc31bdefcdbf8c8e9d90b93b8d4ea19673332482071a0903ec1197141fd4
|
|
| MD5 |
fcf3a7df5d141cf34294d47f229a4cf0
|
|
| BLAKE2b-256 |
1060d5f17c5534480a1f8b05184c0469774fe48ef25aaa78d1f073fc74a0dda4
|