Я смотрел, как построить индикаторы выполнения в 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)
Когда я пытаюсь внедрить этот код в любой из мои программы, я чувствую, что просто теряю время, просто чтобы показать прогресс ... Есть ли способ показать прогресс, пока он выполняет инструкцию; вместо запуска, а затем показа анимации ...
Любая помощь будет оценена; Если я что-то не так, скажите мне, и если вы можете дать какой-нибудь совет ... это будет здорово.
Заранее спасибо ...