如何关闭Jupyter Notebook中Dask Client的重复警告?
解决Dask Client在Jupyter Notebook中持续输出内存警告的问题
我之前也被Dask Worker的这些内存警告烦过!它们霸占Jupyter单元格的输出,找个实际结果都费劲。下面几种方法可以帮你解决这个问题:
方法1:创建Client时直接指定日志级别
这是最直接的方式,在初始化Client时通过logging_level参数把日志级别调高到ERROR,这样就只会显示严重错误,警告信息会被直接屏蔽:
import pandas as pd from sqlalchemy import create_engine, MetaData from sqlalchemy import select, insert, func import dask.dataframe as dd from dask.distributed import Client # 初始化Client时设置日志级别为ERROR client = Client(n_workers=4, threads_per_worker=4, processes=False, logging_level='ERROR') # 后续你的代码保持不变 engine = create_engine(uri) meta_core = MetaData() meta_core.reflect(bind=engine) table = meta_core.tables['table'] dd_main = dd.read_sql_table( table=table, uri=uri, index_col='id' ) dd_main.head()
方法2:通过Python logging模块精准控制
如果方法1没生效,你可以直接操作Python的logging系统,专门针对distributed.worker这个日志器调整级别,彻底屏蔽它的警告:
import logging from dask.distributed import Client # 定位到Dask Worker的日志器 worker_logger = logging.getLogger('distributed.worker') # 将日志级别设为ERROR,不再输出WARNING及以下的信息 worker_logger.setLevel(logging.ERROR) # 再初始化Client client = Client(n_workers=4, threads_per_worker=4, processes=False) # 后续代码...
把这段代码放在创建Client之前运行,就能精准过滤掉目标警告。
方法3:调整内存警告的触发阈值(保留极端情况警告)
如果你不想完全关掉警告,只是希望它不要频繁弹出,可以修改Dask的内存配置,提高警告触发的内存占比阈值:
import dask from dask.distributed import Client # 调整内存相关配置,提高触发警告的阈值 dask.config.set({ 'distributed.worker.memory.target': 0.9, # 内存占用到90%时触发预警 'distributed.worker.memory.spill': 0.95, # 95%时开始将数据溢写到磁盘 'distributed.worker.memory.pause': 0.98, # 98%时暂停任务调度 'distributed.worker.memory.terminate': 0.99 # 99%时终止Worker }) # 初始化Client client = Client(n_workers=4, threads_per_worker=4, processes=False) # 后续代码...
这样只有当内存占用接近极限时才会触发警告,平时就不会打扰你查看输出了。
内容的提问来源于stack exchange,提问作者Andrey Goloborodko
相关产品推荐
相关产品推荐

