파이썬 프로그램을 짜다가 사용자가 프로그램의 진행상황을 궁금할 수 있다는 생각이 들었습니다.

1년의 Data를 통계내고 있는 프로그램을 짜고 있는데, 1일 데이터의 행의 수가 6000개 정도 되고, 1년이면 대략 2,190,000행 5열 정도의 데이터를 처리합니다. SQL 쿼리문이 1일에 대략 1초니까 1년의 쿼리문이 진행된다고 했을때, 365초입니다.

따라서 파이썬 .exe(실행파일)을 사용자가 실행했을 때, 5~6분을 기다리는데, 그 때 프로그램이 진행되는건지 멈춘건지 알 수 없기 때문에, 진행상황을 알 수 있는 Progress bar가 필요합니다.

아래는 프로그레스 바의 Sample 코드입니다.‬

import sys

def printProgress (iteration, total, prefix = '', suffix = '', decimals = 1, barLength = 100):
    formatStr = "{0:." + str(decimals) + "f}"
    percent = formatStr.format(100 * (iteration / float(total)))
    filledLength = int(round(barLength * iteration / float(total)))
    bar = '#' * filledLength + '-' * (barLength - filledLength)
    sys.stdout.write('\r%s |%s| %s%s %s' % (prefix, bar, percent, '%', suffix)),
    if iteration == total:
        sys.stdout.write('\n')
    sys.stdout.flush()
    
for i in range(0, 100):
  printProgress(i, 100, 'Progress:', 'Complete', 1, 50)

printProgress라는 함수에를 만들었고, for문에서 i가 0부터 100까지 늘어나면서 Progress bar가 올라가는 알고리즘으로 되어 있습니다.

 

이 글을 보시는 분들은 for문에서 enumerate를 사용하셔서 index를 i 대신 적용하시면 for문이 돌때마다 index가 올라갈 것이고, 진행상황을 알 수 있는 bar가 Print될 것입니다.

 

감사합니다.

반응형

+ Recent posts