Python · 进度条

发布时间:2019-05-20 22:58:24编辑:auto阅读(1868)

    (这里是本章会用到的 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 运行大程序却又暂时苦于无法得知进度的观众老爷们(虽然这部分观众老爷可能都知道怎么实现进度条……)。进度条通常来说可以用在爬虫或机器学习中,我实现的神经网络里面就用到了它

关键字