이것은 tqdm_notebook 이 작동하지 않는 경우에 대한 대체 답변입니다 .
다음과 같은 예가 주어진다 :
from time import sleep
from tqdm import tqdm
values = range(3)
with tqdm(total=len(values)) as pbar:
for i in values:
pbar.write('processed: %d' %i)
pbar.update(1)
sleep(1)
결과는 다음과 같습니다 (진행률이 빨간색으로 표시됨).
0%| | 0/3 [00:00<?, ?it/s]
processed: 1
67%|██████▋ | 2/3 [00:01<00:00, 1.99it/s]
processed: 2
100%|██████████| 3/3 [00:02<00:00, 1.53it/s]
processed: 3
문제는 stdout 및 stderr에 대한 출력입니다. 이 새 행의 관점에서 비동기식으로 개별적으로 처리 입니다.
Jupyter가 stderr에서 첫 번째 라인을 수신 한 다음 stdout에서 "processed"출력을 수신한다고 가정하십시오. 그런 다음 stderr에서 출력을 수신하여 진행 상황을 업데이트하면 마지막 줄만 업데이트하므로 돌아 가지 않고 첫 번째 줄을 업데이트합니다. 대신 새 줄을 작성해야합니다.
해결 방법 1, stdout에 쓰기
한 가지 해결 방법은 둘 다 stdout으로 출력하는 것입니다.
import sys
from time import sleep
from tqdm import tqdm
values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
for i in values:
pbar.write('processed: %d' % (1 + i))
pbar.update(1)
sleep(1)
출력이 (더 이상 빨간색으로) 변경됩니다 :
processed: 1 | 0/3 [00:00<?, ?it/s]
processed: 2 | 0/3 [00:00<?, ?it/s]
processed: 3 | 2/3 [00:01<00:00, 1.99it/s]
100%|██████████| 3/3 [00:02<00:00, 1.53it/s]
여기서 Jupyter가 줄이 끝날 때까지 명확하지 않은 것으로 보입니다. 공백을 추가하여 다른 해결 방법을 추가 할 수 있습니다. 같은 :
import sys
from time import sleep
from tqdm import tqdm
values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
for i in values:
pbar.write('processed: %d%s' % (1 + i, ' ' * 50))
pbar.update(1)
sleep(1)
우리에게주는 것 :
processed: 1
processed: 2
processed: 3
100%|██████████| 3/3 [00:02<00:00, 1.53it/s]
해결 방법 2, 대신 설명 설정
일반적으로 두 개의 출력을 가지지 않고 대신 설명을 업데이트하는 것이 더 간단 할 수 있습니다. 예 :
import sys
from time import sleep
from tqdm import tqdm
values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
for i in values:
pbar.set_description('processed: %d' % (1 + i))
pbar.update(1)
sleep(1)
출력으로 (처리 중 설명이 업데이트 됨) :
processed: 3: 100%|██████████| 3/3 [00:02<00:00, 1.53it/s]
결론
대부분 일반 tqdm으로 잘 작동하도록 할 수 있습니다. 그러나 tqdm_notebook이 효과가 있다면 그냥 사용하십시오 (그러나 아마도 그 정도는 읽지 못할 것입니다).
tqdm_notebook
일반조차 수행 할 수print
있으며 진행률 표시 줄에 영향을 미치지 않습니다.