Jupyter 노트북의 tqdm은 새로운 진행 표시줄을 반복적으로 인쇄합니다.
하고 .tqdm
진행 상황을 인쇄하기 위해 주피터 노트북에서 실행 중입니다.합니다.tqdm.write()
은 여전히 만만 、 음음 、 음음 、 음 . 、 음 . . . 。
즉, 새 줄을 인쇄해야 할 때마다 다음 줄에 새 진행 표시줄이 인쇄됩니다.터미널을 통해 스크립트를 실행할 때는 이 문제가 발생하지 않습니다.어떻게 하면 해결할 수 있을까요?
도 한번 써보세요.tqdm.notebook.tqdm
tqdm
, 여기에 개략적으로 기재되어 있습니다.
Import를 다음과 같이 변경하기만 하면 됩니다.
from tqdm.notebook import tqdm
행운을 빕니다.
EDIT: 테스트 결과tqdm
실제로 주피터 노트북의 '텍스트 모드'에서는 정상적으로 동작합니다.최소한의 예를 제시하지 않았기 때문에 알기 어렵지만, 반복할 때마다 인쇄문이 원인이 되어 문제가 발생하고 있는 것 같습니다.인쇄문이 각 상태 표시줄 업데이트 사이에 숫자(~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에서 "처리된" 출력을 수신한 경우.그런 다음 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]
여기서 우리는 주피터가 마지막까지 명확해 보이지 않는 것을 알 수 있다.스페이스를 추가하여 다른 회피책을 추가할 수 있습니다.예를 들어 다음과 같습니다.
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을 올바르게 Import 하는 것이 좋습니다.
from tqdm import tqdm_notebook as tqdm
oscarbranson의 답변을 완성하려면: 실행처에 따라 콘솔 또는 노트북의 프로그레스 바를 자동으로 선택할 수 있습니다.
from tqdm.autonotebook import 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
다른 사람들은 그렇지 않았지만,progress_apply
구체적으로는요.
위의 어느 것도 나에게는 통하지 않는다.다음 명령을 실행하면 오류 발생 후 이 문제가 정렬됩니다(백그라운드에 있는 진행 표시줄의 모든 인스턴스가 지워집니다).
from tqdm import tqdm
# blah blah your code errored
tqdm._instances.clear()
윈도우에 접속하여 여기에 기재된 솔루션 중 어느 것도 중복 바의 문제를 해결할 수 없는 모든 사용자에게 적합합니다.를 인스톨 할 필요가 있었습니다.colorama
tqdm의 기존 문제에서 설명한 바와 같이 패키지를 수정합니다.
pip install colorama
다음 예시와 함께 사용해 보십시오.
from tqdm import tqdm
from time import sleep
for _ in tqdm(range(5), "All", ncols = 80, position = 0):
for _ in tqdm(range(100), "Sub", ncols = 80, position = 1, leave = False):
sleep(0.01)
그 결과 다음과 같은 결과가 나타납니다.
All: 60%|████████████████████████ | 3/5 [00:03<00:02, 1.02s/it]
Sub: 50%|██████████████████▌ | 50/100 [00:00<00:00, 97.88it/s]
사용.Python 3.9.2
그리고.tqdm==4.62.3
:
from tqdm.notebook import tqdm
for item in tqdm(list_of_items):
do_something(item)
tqdm_노트북 사용
from tqdm import tqdm_notebook as tqdm
x=[1,2,3,4,5]
for i in tqdm(range(0,len(x))):
print(x[i])
tqdm을 사용한 프로그레스바의 다른 예
from tqdm import tqdm
my_list = list(range(100))
with tqdm(total=len(my_list)) as pbar:
for x in my_list:
pbar.update(1)
제 경우 ipywidgets를 업데이트하면 일반 사용 시 추가 인쇄가 필요 없습니다.from tqdm import tqdm
.
언급URL : https://stackoverflow.com/questions/42212810/tqdm-in-jupyter-notebook-prints-new-progress-bars-repeatedly
'programing' 카테고리의 다른 글
Python에서 표현식과 문장의 차이점은 무엇입니까? (0) | 2023.01.21 |
---|---|
Javascript 배열 검색 및 문자열 제거 (0) | 2023.01.21 |
목록을 2개씩 반복하려면 어떻게 해야 하나요? (0) | 2023.01.21 |
목록에서 가장 긴 문자열을 선택하는 Python의 가장 효율적인 방법? (0) | 2023.01.21 |
mysql LOAD DATA/mysqlimport 성능 향상? (0) | 2023.01.21 |