(这里是本章会用到的 GitHub 地址)
我实现的这个进度条可能是可以当做一个第三方库来使用的(这个人好自大,啧),它支持记录并发程序的进度且损耗基本只来源于 Python 本身
先来看看我们的进度条长啥样:
它有一个名字(“Test”)、有总任务数和已完成任务数、有总耗时和单个任务平均耗时、还有一个“进度条”。所有这些在整个程序运行过程中都是在一行内输出的、也就是说它不会产生多行输出(如果屏幕够宽的话)。所有任务完成后,进度条会变为:
大体上来说功能还算完备。虽说看上去可能有点厉害,其实最核心的实现只用到了这个功能:
- print("\r" + "xxx", end=""):这样的话会先把 console 里面当前的行清除掉、再输出 xxx
剩下的就都是各种封装了。我打算只说一个实现的大致思路、然后讲讲怎么去调用这个进度条
实现的大纲大概如下:
- 要记录任务开始时的已完成的任务数和未完成的任务数
- 要定义一个计数器,记录着总共已完成的任务数
- 要定义一个 start 函数和一个 update 函数作为接口
- 要定义一个 _flush 函数来控制输出流
调用的方法:
def task():
x = 0
for _ in range(10 ** 6):
x = 0
return x
if __name__ == '__main__':
n = 100
bar = ProgressBar(max_value=n, name="Test")
bar.start()
for i in range(n):
task()
bar.update()
Done!运行效果就是上面那两张图
这章有点水(你居然有自知之明)、主要是想帮一下平时会用 Python 运行大程序却又暂时苦于无法得知进度的观众老爷们(虽然这部分观众老爷可能都知道怎么实现进度条……)。进度条通常来说可以用在爬虫或机器学习中,我实现的神经网络里面就用到了它