如何在不重跑21小时代码的情况下获取decoder.py中的x、y变量?
无需重跑获取变量的解决方案
方案1:利用Jupyter的%run命令保留变量
如果你还没关闭当前Notebook内核,立刻停止!python decoder.py的执行,改用Jupyter内置的%run命令执行脚本:
%run decoder.py
当脚本因缺少matplotlib报错时,前面已经计算完成的stat_dict、x、y会保留在Notebook的命名空间中,你可以直接在后续单元格中打印或使用这些变量。
方案2:添加变量持久化逻辑,跳过耗时计算
如果内核已关闭或进程已结束,需要修改decoder.py添加变量保存与加载逻辑,避免重新计算:
- 在生成
x、y的代码后,添加变量保存代码:import pickle # 将需要的变量保存到本地文件 with open('decoder_data.pkl', 'wb') as f: pickle.dump({'stat_dict': stat_dict, 'x': x, 'y': y}, f) - 找到生成
stat_dict的耗时计算代码块,添加判断逻辑,优先加载已保存的变量:import os import pickle # 检查是否有已保存的变量文件 if os.path.exists('decoder_data.pkl'): # 直接加载变量,跳过21小时的计算 with open('decoder_data.pkl', 'rb') as f: saved_data = pickle.load(f) stat_dict = saved_data['stat_dict'] x = saved_data['x'] y = saved_data['y'] else: # 原有的耗时计算逻辑,生成stat_dict # --- 这里是你原本需要21小时的代码 --- x = stat_dict['plog'] y = stat_dict['cycles'] # 保存变量到文件 with open('decoder_data.pkl', 'wb') as f: pickle.dump({'stat_dict': stat_dict, 'x': x, 'y': y}, f) - 补全matplotlib的导入语句(
import matplotlib.pyplot as plt),添加绘图代码,然后在Notebook中用%run decoder.py执行,脚本会直接加载已保存的变量,无需重新计算。
方案3:临时添加调试断点
如果不想修改太多代码,可在绘图代码前添加调试断点,当脚本执行到断点时手动保存变量:
在decoder.py的绘图代码前添加:
import pdb; pdb.set_trace()
然后用%run decoder.py执行脚本,当进入pdb调试界面时,输入以下命令保存变量:
import pickle with open('temp_vars.pkl', 'wb') as f: pickle.dump({'x': x, 'y': y}, f)
输入q退出调试后,在Notebook中加载保存的文件即可获取变量:
import pickle with open('temp_vars.pkl', 'rb') as f: vars = pickle.load(f) x = vars['x'] y = vars['y']
内容的提问来源于stack exchange,提问作者Aulan Lucrèce
相关产品推荐
相关产品推荐

