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()
Заранее спасибо и, надеюсь, я смогу отображать индикаторы прогресса для всех активных соединений