[英]Making tqdm write to log files
tqdm是一個很好的 python 庫,用於跟蹤可迭代的進度。
它的默認操作模式是重復清除一條線並使用回車重新繪制,但與日志記錄結合使用時會產生非常討厭的 output。 有沒有辦法讓我定期將其寫入日志文件而不是使用此打印件?
這是我得到的最好的是我自己的 hacky 實現:
def my_tqdm(iterable):
"Like tqdm but us logging. Include estimated time and time taken."
start = time.time()
for i, item in enumerate(iterable):
elapsed = time.time() - start
rate = elapsed / (i + 1)
estimated = rate * len(iterable) - elapsed
num_items = len(iterable)
LOGGER.info(
"Processed %d of %d items (%.1f%%) in %.1fs (%.1fs remaining, %.1f s/item)",
i,
num_items,
i / num_items * 100,
elapsed,
estimated,
rate,
)
yield item
但如果我能用 tqdm 本身來做這件事,這樣人們就不會在代碼審查中抱怨我,那就更好了。
您可以將 TQDM 進度條的輸出重定向到 null 設備(例如 /dev/null),並在需要時手動打印/記錄狀態欄 - 無論是在每次迭代時,還是在特定時間間隔。
例如:
import os
import time
import logging
from tqdm import tqdm
LOG_INTERVAL = 5
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('tqdm_logger')
progress_bar = tqdm(range(20), file=open(os.devnull, 'w'))
for i in progress_bar:
# do something meaningful instead...
time.sleep(0.1)
if progress_bar.n % LOG_INTERVAL == 0:
logger.info(str(progress_bar))
此代碼塊將產生以下輸出:
INFO:tqdm_logger: 0%| | 0/20 [00:00<?, ?it/s]
INFO:tqdm_logger: 25%|██▌ | 5/20 [00:00<00:01, 9.59it/s]
INFO:tqdm_logger: 50%|█████ | 10/20 [00:01<00:01, 9.54it/s]
INFO:tqdm_logger: 75%|███████▌ | 15/20 [00:01<00:00, 9.54it/s]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.