TQDM несколько выходов с обратным вызовом

У меня возникают проблемы с отображением нескольких индикаторов выполнения tqdm ( https://github.com/tqdm/tqdm) с перехватом обратного вызова.

Я извлекаю данные из aria2c, используя интерфейс xmlrpc. Проблема, с которой я столкнулся, заключается в том, что в этом случае я добавляю 3 ссылки, первые 2 бара отображаются правильно, но перед тем, как появляется третья, она выходит с ошибкой:

ValueError: n (-622592) не может быть отрицательным

Кажется, я не могу понять, почему это в строке 11:

self.update (b * bsize - self.n)

вычисляет отрицательное значение на последней итерации.

Вот полный код:

from tqdm import tqdm
import time
import xmlrpc.client



class TqdmUpTo(tqdm):
    def update_to(self, b=1, bsize=1, tsize=None):
        if tsize is not None:
            self.total = tsize
        self.update(b * bsize - self.n)

def main():
    s = xmlrpc.client.ServerProxy("http://localhost:6800/rpc")
    pbar = []
    for i in range(3):
        r = s.aria2.addUri(["http://ipv4.download.thinkbroadband.com/100MB.zip"], {"dir": "/users/osktrini/Desktop/ariatest"})
        pbar.append(TqdmUpTo(total=int(99e9), unit='B', unit_scale=True, unit_divisor=1024, miniters=1, position=i))

    while True:

        globalstat = s.aria2.getGlobalStat()
        activeglobal = int(globalstat['numActive'])
        activeconnections = s.aria2.tellActive()
        if activeglobal <= 0:
            break
        for conn in activeconnections:
            time.sleep(5)
            totalLength = int(conn['totalLength'])
            completedLength = int(conn['completedLength'])
            print(conn)
            pbar[i].update_to(completedLength, 1, totalLength)
    for i in range(len(pbar)):
        pbar[i].close()
    tqdm.write('all done')

if __name__ == "__main__":
    main()

Заранее спасибо и, надеюсь, я смогу отображать индикаторы прогресса для всех активных соединений

0 ответов

Другие вопросы по тегам