两个进度条,分别进行更新

时间:2019-12-18 21:59:07

标签: python progress-bar

我想要一个应用程序的加载栏,但是该应用程序有很大的暂停时间,所以我也希望表明即使加载栏暂时没有填充,该进程也没有终止。

使用python progressbar库,我想到了这一点。

import progressbar
import time

loopval=20

bar = progressbar.ProgressBar(maxval=loopval,widgets[progressbar.Bar(marker='#',fill='.',\
left='[',right=']'),progressbar.AnimatedMarker(), progressbar.Percentage()])

bar.start()

for i in range(loopval):
   bar.update(i+1)
   time.sleep(0.1)

这会打印出一个美观的'.s横条,它慢慢地用'#'填充,并在行尾具有准确的百分比以及旋转的动画标记。

例如: [############################################### ###########################] / 100% (最后的斜杠在|,/,-和\之间)

我希望能够独立于条形更新来更新动画标记。这样,即使该栏暂时没有更新,动画标记也会显示该过程仍然存在。

我已经浏览了进度栏文档,但找不到解决方法。如果有更好的图书馆可以使我更轻松地切换图书馆,我就不会嫁给这个图书馆。

1 个答案:

答案 0 :(得分:1)

不确定这是否正是您要寻找的东西,但是我设法通过用asyncio包装代码来做到这一点。我将两次更新之间的睡眠时间增加到1秒,以使异步更新更加明显。希望这会有所帮助。

# Python 3.6+
import asyncio
import progressbar

async def update_bar(bar):
    while not bar.end_time:
        bar.update()
        await asyncio.sleep(0.1)

async def iterate_bar(bar, loopval):
    bar.start()
    for i in range(loopval):
        bar.update(i+1)
        await asyncio.sleep(1)
    bar.finish()

async def main(bar, loopval):
    await asyncio.gather(update_bar(bar), iterate_bar(bar, loopval))

if __name__ == '__main__':
    loopval = 20
    bar = progressbar.ProgressBar(
        maxval=loopval,
        widgets=[
            progressbar.Bar(
                marker='#',
                fill='.',
                left='[',
                right=']',
            ),
            progressbar.AnimatedMarker(),
            progressbar.Percentage(),
        ],
    )

    asyncio.run(main(bar, loopval))
相关问题