[python] tqdm - python progress bar 사용법
오래 걸리는 코드를 돌릴 때, 현재 어느 정도 진행되었는지 모르면 제대로 진행 중인지 헷갈리고 답답할 때가 많다.
Python 에서는 tqdm
라이브러리를 통해서, 쉽게 진행상황을 아래와 같은 바 형태로 볼 수 있다.
이 글에선 tqdm에 대한 기본적인 사용법을 소개한다.
먼저 상단에 아래와 같이 tqdm을 선언해 준다.
기본 사용법
- 선언
from tqdm import tqdm
-
사용
기본적인 사용법은 매우 쉽다.
순회 가능한 객체(리스트, 튜플, 이터레이터 등)를 tqdm()으로 감싸고, for문에 삽입하면 된다.
A = [1, 2, 3, 4] for a in tqdm(A): pass
바를 원하는 대로 꾸미고 싶으면 아래 옵션들을 사용할 수 있다.
자주 쓰는 옵션
- desc : 진행률 앞쪽 출력 문장
기타 옵션
- total : 전체 진행 수
- ncols : 진행률 출력 폭 조절
- ascii : 바 모양 (첫 번째 문자는 공백이어야 작동)
- leave : # 반복문 완료 시, 진행률 출력 남김.
iterable = ['a', 'b', 'c', 'd', 'e']
for i in tqdm(iterable,
total = len(iterable), ## 전체 진행수
desc = 'Description', ## 진행률 앞쪽 출력 문장
ncols = 70, ## 진행률 출력 폭 조절
ascii = ' =', ## 바 모양, 첫 번째 문자는 공백이어야 작동
leave = True, ## True 반복문 완료시 진행률 출력 남김. False 남기지 않음.
):
pass
수동 설정
객체 순회 없이, total
옵션과 update()
함수를 통해 직접 특정 타이밍 마다 진행률을 업데이트해 줄 수도 있다.
이때는 with
를 사용하거나, 삭제(del, close())
기능을 함께 사용해주어야 한다. 보통 범위가 명확하고 따로 삭제 명령이 필요없는 with 사용을 권장한다.
- with
with tqdm(tota=100) as pbar:
for i in range(10):
pbar.update(10)
- close
pbar = tqdm(total=100)
for i in range(10):
pbar.update(10)
pbar.close()
이중 루프(Nested Loop)
큰 루프 안에 작은 루프도 시간이 많이 걸려서, 각각 진행률을 모두 보고 싶을 때가 있다.
이럴 때는 아래와 같이 position
옵션과 leave
옵션을 사용할 수 있다.
position
: 바깥쪽 루프일수록 낮은 숫자를 사용한다.leave
: 안쪽 루프에 leave=False를 주어, 바깥쪽 루프가 깨지면서 여러 번 표시되지 않도록 한다.
for outer in tqdm([10, 20, 30, 40, 50], desc='outer', position=0):
for inner in tqdm(range(outer), desc='inner', position=1, leave=False):
pass