您可以使用reload
全局函数来重新执行主脚本的代码,从而实现类似目的。您将需要编写一个包装器脚本,该脚本会导入您的主脚本,向其询问要缓存的变量,然后在包装器脚本的模块范围内缓存该副本,然后在需要时(当您在stdin上按Enter或其他命令时) ),它会调用,reload(yourscriptmodule)
但这次将缓存的对象传递给它,以便您的脚本可以绕过昂贵的计算。这是一个简单的例子。
import sys
import mainscript
part1Cache = None
if __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运行新代码。