您可以使用
reload全局函数来重新执行主脚本的代码,从而实现类似目的。您将需要编写一个包装器脚本,该脚本会导入您的主脚本,向其询问要缓存的变量,然后在包装器脚本的模块范围内缓存该副本,然后在需要时(当您在stdin上按Enter或其他命令时)
),它会调用,
reload(yourscriptmodule)但这次将缓存的对象传递给它,以便您的脚本可以绕过昂贵的计算。这是一个简单的例子。
wrapper.py
import sysimport mainscriptpart1Cache = Noneif __name__ == "__main__": while True: if not part1Cache: part1Cache = mainscript.part1() mainscript.part2(part1Cache) print "Press enter to re-run the script, CTRL-C to exit" sys.stdin.readline() reload(mainscript)
主脚本
def part1(): print "part1 expensive computation running" return "This was expensive to compute"def part2(value): print "part2 running with %s" % value
在
wrapper.py运行时,您可以编辑
mainscript.py,向
part2功能中添加新代码,并能够针对预先计算的part1Cache运行新代码。



