在较大循环内具有间隔的tqdm

时间:2019-06-21 13:12:06

标签: python tqdm

我有一个外循环

for i in itertools.count():

并且每隔一段时间就会发生一次事件:

if i % log_interval == 0:
    perform_logging()
if i % save_interval == 0:
    save()
# etc.

我想使用tqdm跟踪下一个日志/保存/等的进度。 理想情况下,tqdm可以同时打印几个进度条,

enter image description here

执行此操作的最佳方法是什么?谢谢!

2 个答案:

答案 0 :(得分:1)

类似这样的东西:

from __future__ import division, print_function
import itertools
from math import ceil
from tqdm import tqdm
from time import sleep

total = 987
log_interval = 2
save_interval = 9
with tqdm(total=total, desc="overall") as tOverall:
  with tqdm(total=ceil(total / log_interval), unit="log") as tLog:
    with tqdm(total=ceil(total / save_interval), unit="save") as tSave:
      for i in itertools.count(0, 1):
        sleep(0.01)
        if i % log_interval == 0:
          perform_logging()
          tLog.update()
        if i % save_interval == 0:
          save()
          tSave.update()
        if i + 1 == total:
          break
        tOverall.update()
print('\n')

答案 1 :(得分:0)

您的版本存在一个小问题,进度条在每次迭代后都没有重新启动。我还希望i无限期递增。这是我想出的版本:

from __future__ import division, print_function
import itertools
from math import ceil
from tqdm import tqdm
from time import sleep

total = 987
log_interval = 2
save_interval = 9

for i in itertools.count():
    if i % log_interval == 0:
        tLog = tqdm(total=ceil(total / log_interval), unit="log")
    if i % save_interval == 0:
        tSave = tqdm(total=ceil(total / save_interval), unit="save")

    # do work

    if i % log_interval == 0:
        tLog.update()
    if i % save_interval == 0:
        tSave.update()

print('\ n')