两个单独更新的进度条
Two progress bars with separate updates
我想要一个应用程序的加载栏,但是说应用程序有很长的暂停时间,所以我还想要一个指示器,即使加载栏有一段时间没有填充,进程也没有停止。
使用 python 进度条库,我想到了这个。
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 that slowly fills with '#',并且在行尾有一个准确的百分比以及一个旋转的动画标记。
例如:
[############################################### ###########################]/100%
(末尾的斜杠在 |、/、- 和 \ 之间)
我希望能够独立于栏更新来更新动画标记。这样即使条形图有一段时间没有更新,动画标记也会显示进程仍然存在。
我查看了进度条文档,但找不到执行此操作的方法。如果有更好的库可以让这更容易,我不会嫁给这个库,我也很乐意切换。
不确定这是否正是您要查找的内容,但我通过使用 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))
我想要一个应用程序的加载栏,但是说应用程序有很长的暂停时间,所以我还想要一个指示器,即使加载栏有一段时间没有填充,进程也没有停止。
使用 python 进度条库,我想到了这个。
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 that slowly fills with '#',并且在行尾有一个准确的百分比以及一个旋转的动画标记。
例如: [############################################### ###########################]/100% (末尾的斜杠在 |、/、- 和 \ 之间)
我希望能够独立于栏更新来更新动画标记。这样即使条形图有一段时间没有更新,动画标记也会显示进程仍然存在。
我查看了进度条文档,但找不到执行此操作的方法。如果有更好的库可以让这更容易,我不会嫁给这个库,我也很乐意切换。
不确定这是否正是您要查找的内容,但我通过使用 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))