如何全局可靠禁用sentence-transformers中的tqdm进度条?
解决SentenceTransformer批量编码时tqdm日志无法禁用的问题
可行方案汇总
直接设置tqdm全局配置:在代码开头添加以下代码,直接覆盖tqdm核心配置,优先级高于环境变量,确保所有底层调用的tqdm都被禁用:
from tqdm import tqdm tqdm._instances.clear() # 清除现有进度条实例 tqdm.disable = True # 全局禁用所有tqdm输出通过SentenceTransformer参数控制:
encode方法本身支持禁用进度条,调用时添加show_progress_bar=False参数即可:# 单文本调用时 row = {'id': obj['id'],'embedding' : np.ndarray.tolist(model.encode(text, show_progress_bar=False))}推荐改用批量编码方式,既禁用进度条又提升效率:
texts = [obj['text'] for obj in data] embeddings_list = model.encode(texts, show_progress_bar=False) embeddings = [{'id': data[i]['id'], 'embedding': np.ndarray.tolist(embeddings_list[i])} for i in range(len(data))]强制重定向tqdm输出:如果前两种方法无效,可通过重定向标准输出拦截tqdm日志:
import sys from contextlib import redirect_stdout class NullIO: def write(self, msg): pass with redirect_stdout(NullIO()): embeddings = [] for obj in data: text = obj['text'] row = {'id': obj['id'],'embedding' : np.ndarray.tolist(model.encode(text))} embeddings.append(row)
环境变量TQDM_DISABLE失效原因
SentenceTransformer内部调用tqdm时,可能显式设置了disable参数或使用独立实例,导致全局环境变量被覆盖。部分版本的encode方法会强制启用进度条,忽略环境变量配置。
内容的提问来源于stack exchange,提问作者Adam Hughes
相关产品推荐
相关产品推荐

