You can achieve something like this using the reload
global function to re-execute your main script’s code. You will need to write a wrapper script that imports your main script, asks it for the variable it wants to cache, caches a copy of that within the wrapper script’s module scope, and then when you want (when you hit ENTER on stdin or whatever), it calls reload(yourscriptmodule)
but this time passes it the cached object such that yourscript can bypass the expensive computation. Here’s a quick example.
wrapper.py
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)
mainscript.py
def part1():
print "part1 expensive computation running"
return "This was expensive to compute"
def part2(value):
print "part2 running with %s" % value
While wrapper.py
is running, you can edit mainscript.py
, add new code to the part2
function and be able to run your new code against the pre-computed part1Cache.