tqdm
Jupyter 노트북에서 실행중인 스크립트에서 진행 상황을 인쇄 하는 데 사용 하고 있습니다. 를 통해 모든 메시지를 콘솔에 인쇄하고 tqdm.write()
있습니다. 그러나 이것은 여전히 나에게 다음과 같이 왜곡 된 결과를줍니다.
즉, 새 줄을 인쇄해야 할 때마다 다음 줄에 새 진행률 표시 줄이 인쇄됩니다. 터미널을 통해 스크립트를 실행할 때 발생하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?
답변
여기에 요약 된대로 tqdm.notebook.tqdm
대신 사용 하십시오 .tqdm
가져 오기를 다음과 같이 변경하는 것만 큼 간단 할 수 있습니다.
from tqdm.notebook import tqdm
행운을 빕니다!
편집 : 테스트 후 tqdm
Jupyter 노트북의 ‘텍스트 모드’에서 실제로 제대로 작동 하는 것 같습니다 . 최소한의 예제를 제공하지 않았기 때문에 말하기가 어렵지만 문제가 각 반복의 인쇄 문으로 인해 발생한 것처럼 보입니다. print 문은 각 상태 표시 줄 업데이트 사이에 숫자 (~ 0.89)를 출력하여 출력을 엉망으로 만듭니다. 인쇄 문을 제거해보십시오.
답변
이것은 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을 올바르게 가져 오면 더 좋습니다 .
from tqdm import tqdm_notebook as tqdm
답변
여기의 다른 팁이 작동하지 않고 나처럼 pandas
통합을 사용하는 경우 처리 progress_apply
할 수 tqdm
있습니다.
from tqdm.autonotebook import tqdm
tqdm.pandas()
df.progress_apply(row_function, axis=1)
여기서 핵심은 tqdm.autonotebook
모듈에 있습니다. 에 명시된 바와 같이 IPython 노트북에서 사용하기에 감독의 지시 ,이 차종은 tqdm
Jupyter 노트북에 사용되는 진행률 표시 줄 형식과 Jupyter 콘솔 사이에서 선택 – 이유는 여전히 내 옆에 더 조사를 부족에 대한가 선택한 특정 형식 tqdm.autonotebook
원활하게 작동 pandas
다른 모든 didn를하면서, 아니, progress_apply
구체적으로.
답변
oscarbranson의 답변을 완료하려면 : 실행 위치에 따라 진행률 표시 줄의 콘솔 또는 노트북 버전을 자동으로 선택할 수 있습니다.
from tqdm.autonotebook import tqdm
답변
위의 어느 것도 나를 위해 작동하지 않습니다. 다음을 실행하면 오류 후에이 문제가 정렬됩니다 (백그라운드에서 진행률 표시 줄의 모든 인스턴스를 지 웁니다).
from tqdm import tqdm
# blah blah your code errored
tqdm._instances.clear()
답변
tqdm_notebook 사용
tqdm에서 tqdm_notebook을 tqdm으로 가져 오기
x = [1,2,3,4,5]
tqdm (len (x))에서 i의 경우 :
print(x[i])
