当我的脚本执行可能需要一些时间的任务时,如何使用进度条?
例如,一个需要一些时间才能完成并True在完成时返回的函数.如何在执行功能期间显示进度条?
请注意,我需要实时,所以我无法弄清楚该怎么做.我需要thread这个吗?我不知道.
现在我正在执行函数时不打印任何内容,但是进度条会很好.此外,我更感兴趣的是从代码的角度来看如何做到这一点.
在python 3中,我们可以使用以下脚本轻松地在同一行上打印.我用这个来理解我的循环的进度(剩下多少时间).但是,在jupyter中它不起作用(它在不同的行上打印)
import time
for f in range(10):
print(f, end='\r', flush=True)
time.sleep(10)
Run Code Online (Sandbox Code Playgroud)
它不能打开%pprint的漂亮打印,我尝试使用sys.stdout.write(),但我也有这个问题.
我经常看到,tqdm进度条被其他打印件打破,例如:
93%|??????????| 28/30 [00:02<00:00, 13.44it/s]Subject S9
100%|??????????| 30/30 [00:02<00:00, 12.94it/s]
93%|??????????| 28/30 [00:02<00:00, 11.49it/s]Pickling...
100%|??????????| 30/30 [00:02<00:00, 11.47it/s]
Run Code Online (Sandbox Code Playgroud)
这里应该只显示 2 个进度条。尽管如此成功,打印一些文本会以很高的百分比中断进度条,其余的会在之后打印出来。
是否可以以某种方式“刷新”进度条?
我读过,默认情况下会tqdm打印stderr并尝试刷新它
sys.stderr.flush()
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。
以上都是在PyCharm控制台模拟中发生的,所以可以与此相关。
我想有两个独立的进度条.
这是一个最小的例子,如果我使用两个条形,它们没有正确更新.而是创建新的条形图.
import time
from tqdm import *
pbar1 = tqdm(total=100)
pbar2 = tqdm(total=200)
for i in range(10):
pbar1.update(10)
pbar2.update(20)
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
运行示例时.我有类似的东西:
0%| | 0/100 [00:00<?, ?it/s]
20%|?? | 20/100 [00:01<00:04, 19.97it/s]
30%|??? | 30/100 [00:02<00:04, 15.36it/s]
40%|???? | 40/100 [00:03<00:04, 13.23it/s]
50%|????? | 50/100 [00:04<00:04, 12.05it/s]
60%|?????? | 60/100 [00:05<00:03, 11.35it/s]
70%|??????? | 70/100 [00:06<00:02, 10.90it/s]
80%|???????? | 80/100 [00:07<00:01, 10.61it/s]
90%|????????? | 90/100 [00:08<00:00, 10.42it/s]
100%|??????????| 100/100 [00:09<00:00, 10.28it/s]
100%|??????????| 200/200 [00:09<00:00, 20.57it/s]
Run Code Online (Sandbox Code Playgroud)
如图所示,更新无法正常工作并添加新栏.有两个独立的条可以正确更新吗?