파이썬/이론
[Python] tqdm을 사용하여 for 반복, 함수 진행률 출력하기
purplechip
2020. 8. 23. 14:11
실행 시간이 긴 프로그램의 경우 간혹 어느 정도 진행되었는지 확인할 필요가 있다. 물론 print()
와 carriage return \r
을 사용해서 직접 구현할 수 있지만 계속 출력되는 line이 지저분해 보이기도 하고 매번 직접 구현한 것을 옮겨 사용하기도 애매하다. python에서는 tqdm
이라는 모듈을 사용하여 프로그램의 진행 상황을 깔끔하게 출력할 수 있다. ProgressBar
라는 또 다른 모듈이 있긴 하지만 개발이 몇 년 전부터 이루어지지 않고 있으며 속도는 800ns/iter로 tqdm
의 60ns/iter보다 느린 속도를 가진다.
tqdm
모듈에서 tqdm
클래스를 사용하며 parameter는 다음과 같다.
class tqdm():
""" Decorate an iterable object, returning an iterator which acts exactly like the original iterable, but prints a dynamically updating progressbar every time a value is requested. """
def __init__(self, iterable=None, desc=None, total=None, leave=True, file=None, ncols=None, mininterval=0.1, maxinterval=10.0, miniters=None, ascii=None, disable=False, unit='it', unit_scale=False, dynamic_ncols=False, smoothing=0.3, bar_format=None, initial=0, position=None, postfix=None, unit_divisor=1000):
iterable
: 반복가능한 객체. range, list, tuple, dict 등을 넣을 수 있음.desc
: 진행바에 출력할 문구.total
: 진행바의 최대 수치. 값이 없으면 iterable의 length가 된다.file
: 어디에 출력할 지를 나타내는 값. 기본값은 std.err 이다.unit
: 반복의 단위를 나타내는 값.unit_scale
: 큰 단위에 대해 자동적으로 scale 적용할지 여부(Kilo, Mega, Giga 등)
주로 사용하는 것은 이 정도인 듯 하고 나머지는 tqdm document에서 확인하길 바란다. 사용 예제는 다음과 같다.
사용 예
from tqdm import tqdm
, import time
은 생략한다.
1
2
|
for _ in tqdm(range(10), desc='tqdm test'):
time.sleep(0.1)
|
cs |
출력 :
tqdm test: 100%|██████████| 10/10 [00:01<00:00, 9.53it/s]
|
cs |
Manual로 사용
1
2
3
4
|
with tqdm(total=100, desc='tqdm manual', unit='unit', ascii=True) as pbar:
for _ in range(10):
time.sleep(0.1)
pbar.update(10)
|
cs |
출력 :
tqdm manual: 100%|##########| 100/100 [00:01<00:00, 95.65unit/s]
|
cs |
Manual은 선언해서 사용하는 방법도 있다.
1
2
3
4
5
|
pbar = tqdm(total=1000**3, unit='unit', unit_scale=True)
for _ in range(20):
time.sleep(0.1)
pbar.update(1000**3 / 20)
pbar.close()
|
cs |
출력 :
100%|██████████| 1.00G/1.00G [00:02<00:00, 478Munit/s]
|
cs |
참고
tqdm gitgub