TQDM с интервалами внутри большей петли - PullRequest
0 голосов
/ 21 июня 2019

У меня есть внешний цикл

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 ]

1 голос
/ 21 июня 2019

Примерно так:

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')
0 голосов
/ 26 июня 2019

В вашей версии возникла небольшая проблема, когда индикатор выполнения не перезапускался после каждой итерации.Я также хотел, чтобы 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')

...