1 분 소요

오래 걸리는 코드를 돌릴 때, 현재 어느 정도 진행되었는지 모르면 제대로 진행 중인지 헷갈리고 답답할 때가 많다.

Python 에서는 tqdm 라이브러리를 통해서, 쉽게 진행상황을 아래와 같은 바 형태로 볼 수 있다.

image.png

이 글에선 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

참고자료