如何释放Jupyter Notebook中for loop的CPU资源 解决内核中断问题
解决方案
核心原因是Deepnote等云Jupyter平台有CPU持续高占用检测机制,当进程连续占用CPU超过阈值一定时间后,会主动中断内核释放资源,这就是你本地运行正常但平台上报错的核心原因,可按照以下方案优化:
- 主动给CPU降载,避免持续高占用
导入time模块,在每层循环末尾添加休眠逻辑:主页面循环每次结束加time.sleep(1.5),子页面循环每次结束加time.sleep(0.5);每轮while迭代完成后调用driver.quit()关闭Selenium浏览器进程,下一轮迭代重新初始化driver,避免浏览器后台进程累积占用CPU。 - 修复代码里的隐性高消耗逻辑
你崩溃位置的打印语句print(f'Página: {page} de {pages}')存在问题:pages是长度120+的numpy数组,每次打印都需要序列化整个数组,会大幅拉高CPU占用,改为print(f'Página: {page} de {final_page}')即可;同时减少不必要的高频打印,注释掉调试用的冗余打印语句,只保留关键进度输出,避免占用标准输出缓冲区的同时拉高CPU消耗。 - 手动释放闲置资源
导入gc模块,每轮主页面循环处理完成后,手动删除不再使用的df、df2等临时DataFrame变量,调用gc.collect()主动触发垃圾回收,避免闲置资源累积占用CPU和内存。 - 优化超时和异常逻辑
给driver添加页面加载超时限制driver.set_page_load_timeout(30),避免页面加载失败时进程卡壳持续占CPU;把现有宽泛的except改为捕获具体异常类型,比如except (NoSuchElementException, TimeoutException),避免未知异常导致进程挂起。 - 拆分长时任务
把单次循环的120页拆分为4组,每组30页,每组跑完就把结果写入持久化文件(如csv),避免单次任务长时间连续占用CPU触发平台的资源限制规则。
内容的提问来源于stack exchange,提问作者NoahVerner
相关产品推荐
相关产品推荐

