-
(Python) 간단한 커스텀 프로그레스 바 코드IT 지식 창고 2024. 2. 21. 23:10
가끔 tqdm을 사용함에 있어 번거로움이 있을 때, 간단한 프로그레스 바를 사용할 수 있는 코드를 공유합니다.
파이썬 입문자분들은 프로그레스 바의 원리도 공부하실 수 있을 겁니다.
코드
import sys import time class ProgBar: def __init__(self, total, decimals=2, bar_length=30, interval=0.05): self.total = total self.decimals = decimals self.bar_length = bar_length self.interval = interval self._num = 0 self._last_update = 0 def start(self): self._num += 1 finalize = self._num >= self.total now = time.time() if now - self._last_update < self.interval and not finalize: return per = f"{(self._num/self.total)*100:.{self.decimals}f}" filled_length = int(round(self.bar_length * self._num / self.total)) bar = "#" * filled_length + "-" * (self.bar_length - filled_length) sys.stdout.write(f"\r{self._num}/{self.total} |{bar}| {per}% ") if self._num == self.total: sys.stdout.write("\n") sys.stdout.flush() self._last_update = now total_items = 100 # 총 항목 수 prog_bar = ProgBar(total_items) # ProgBar 인스턴스 생성 for i in range(total_items): progress.start() # 진행 상황 업데이트 time.sleep(0.1) # 예시를 위한 임시 딜레이
설명
- total : 전체 항목 수로, len(list)등과 같은 숫자를 전달함.
- decimals : %의 소수 자릿수
- bar_length : 진행 막대의 길이
- interval : 업데이트 간격 (업데이트 간격이 짧을 수록 print하는 시간이 더걸려서 어떤 작업을 수행함에 있어 오래 걸릴 수도 있음.)
p.s.
몇 년전 한창 공부할 때, 프로그레스 바는 어떻게 생성되는 지 궁금하여 검색하다가, 다른 분이 올린 블로그의 코드를 개인적으로 커스텀하여 계속 사용하였습니다. (지금은 조금 더 성장하여 tqdm을 상속받아 커스텀하여 사용하고 있습니다.)
지금 다시 검색해보니 그 블로그를 찾지 못해서, 출처를 못달았네요.. 저를 성장 시켜준 분께 감사의 인사를 드립니다..
'IT 지식 창고' 카테고리의 다른 글
(Git) 이전 Commit에서 특정 file만 삭제하기 (filter-repo) (1) 2024.03.22 (Python) os.path vs pathlib.Path (1) 2024.02.26 (Pytorch) Pytorch에서 학습 및 테스트 시 GPU VRAM이 계속 증가하는 이유 (2) 2024.02.14 (Docker) docker container 내에서 root계정과 root권한을 가진 사용자 계정 사용하기 (0) 2023.08.03 (pytorch) pytorch lightning 사용 시, 이어서 학습하기 (0) 2023.02.08 댓글