python 3.x tqdm: процент выполнения по общему процентному показателю прогресса - PullRequest
0 голосов
/ 03 марта 2020

Я хочу использовать tqdm, чтобы показать индикатор выполнения передачи файла. Однако я не могу применить обычный способ использования tqdm, как в

t =tqdm(total=100)
for i in range(10):
    t.update(10)
t.close()

. Причина в том, что у меня есть функция, которая получает обратный вызов прогресса, так что каждый раз, когда обратный вызов вызывается внутри функция, она получит два параметра, consumed_bytes и total_bytes. Это напоминает следующий код:

def progress_bar(consumed_bytes, total_bytes):
    print(consumed_bytes, total_bytes)

file_transfer(..., progress_callback=progressbar)

Поэтому, если бы я использовал следующий способ представления индикатора выполнения (измененная версия первого блока кода, опубликованного выше):

def progress_bar (consumed_bytes, total_bytes):
    t = tqdm(total=total_bytes)
    t.update(consumed_byets)
    t.close()

file_transfer(..., progress_callback=progressbar)

Консоль будет печатать несколько индикаторов выполнения, как показано ниже,

  8%|▊         | 8192/107647 [00:00<00:00, 45509587.24B/s]
 15%|█▌        | 16384/107647 [00:00<00:00, 105722271.90B/s]
 23%|██▎       | 24576/107647 [00:00<00:00, 169259794.92B/s]
 30%|███       | 32768/107647 [00:00<00:00, 194122815.64B/s]
 38%|███▊      | 40960/107647 [00:00<00:00, 213149741.74B/s]
 46%|████▌     | 49152/107647 [00:00<00:00, 372127130.34B/s]
 53%|█████▎    | 57344/107647 [00:00<00:00, 445404015.88B/s]
 61%|██████    | 65536/107647 [00:00<00:00, 336036561.06B/s]
 68%|██████▊   | 73728/107647 [00:00<00:00, 555184282.43B/s]
 76%|███████▌  | 81920/107647 [00:00<00:00, 500141752.08B/s]
 84%|████████▎ | 90112/107647 [00:00<00:00, 692229161.26B/s]
 91%|█████████▏| 98304/107647 [00:00<00:00, 744254260.68B/s]
 99%|█████████▉| 106496/107647 [00:00<00:00, 924796270.77B/s]
100%|██████████| 107647/107647 [00:00<00:00, 785224769.89B/s]

, но я хочу, чтобы она отображала только один индикатор выполнения. Можно ли отобразить только один индикатор выполнения с помощью механизма кода, описанного выше?

1 Ответ

0 голосов
/ 03 марта 2020

t = tqdm(total=total_bytes) используется для создания экземпляра объекта tqdm, и каждый раз, когда создается экземпляр tqdm объекта, он выводит дополнительный индикатор выполнения.

Поэтому я предлагаю переместить эту строку из функции progress_bar, которая должна использоваться только для обновления предварительно созданного объекта tqdm, закройте объект tqdm после завершения передачи файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...