Как я могу показать фактическое выполнение инструкции, встроенной в для l oop? - PullRequest
0 голосов
/ 29 апреля 2020

Я смотрел, как построить индикаторы выполнения в python, и до сих пор каждый урок, касающийся этой топики c, включает использование сторонних модулей, таких как 'progressbar', 'tqdm' ... Я пытался сделать свой собственные индикаторы выполнения без них, но я чувствую, что то, что я сделал, на самом деле не показывает фактического выполнения инструкции, он просто выполняет инструкцию, а затем показывает анимацию индикатора выполнения.

Я впервые написал индикатор хода выполнения, основанный на времени, как этот:

#!/usr/bin/python3

import time, sys
from datetime import datetime

def analysis_progress(seconds):
    bar_length = 50
    status = "[In Progress]"
    sec_start = 0

    while (sec_start < seconds):
        sec_start += 1

        filled_length = int(round(bar_length * sec_start / float(seconds)))

        percentage = round((100.0 * sec_start / float(seconds)), 1)
        progress_bar = '#'*filled_length + '-'*(bar_length - filled_length)
        time.sleep(1)

        sys.stdout.write("\r[{0}] {1}%  {2}".format(progress_bar, percentage, status))

        if (percentage == 100.0):
            status = "[COMPLETED] "
            sys.stdout.write("\r[{0}] {1}%  {2}".format(progress_bar, percentage, status))

start = datetime.now()
analysis_progress(30)
finish = datetime.now()

print(finish-start)

Но это не удобно, если я пытаюсь измерить, сколько потребуется, чтобы закончить все oop. Тогда я подумал написать еще один. Этот последний предназначен для работы над циклами по списку. Он показывает индикатор выполнения на каждой итерации, но он просто запускает инструкцию, а затем показывает индикатор выполнения, который загружается до завершения после времени ожидания.

!/usr/bin/python3

import sys, time

def progress_indicator(iteration_num, loop_var):
     bar_len = 50
     progress_count = 0
     loading_status = "In progress..."

     iteration_start = 0

     while (iteration_start < iteration_num):
        progress_count += 1
        iteration_start += 1

        loaded_point = int(round(bar_len * progress_count / float(iteration_num)))
        percentage = round(100.0 * progress_count / float(iteration_num),1)
        progress_bar = "#"*loaded_point + "-"*(bar_len - loaded_point)
        time.sleep(0.5)

        sys.stdout.write("\r[{0}] {1}% {2}".format(progress_bar, percentage, loading_status))

        if (percentage == 100.0):
             loading_status = "  [COMPLETE]  "
             sys.stdout.write("\r[{0}] {1}% {2}".format(progress_bar, percentage, loading_status))

# this is just a test...
listing = [1234,34,56,45699,12,3]

for result in listing:
     list_len = len(listing)
     num_sum = result ** 5
     progress_indicator(list_len, result)
     print("\nResult: ",result)

Когда я пытаюсь внедрить этот код в любой из мои программы, я чувствую, что просто теряю время, просто чтобы показать прогресс ... Есть ли способ показать прогресс, пока он выполняет инструкцию; вместо запуска, а затем показа анимации ...

Любая помощь будет оценена; Если я что-то не так, скажите мне, и если вы можете дать какой-нибудь совет ... это будет здорово.

Заранее спасибо ...

...