python - 在 Python 中内存整个 block

标签 python memoization joblib

假设我有一些创建多个变量的代码:

# Some code

# Beginning of the block to memoize
a = foo()
b = bar()
...
c =
# End of the block to memoize

# ... some more code

我想记住上面的整个 block ,而不必明确说明 block 中创建/更改的每个变量或手动腌制它们。我如何在 Python 中执行此操作?

理想情况下,我希望能够用一些东西(if/elsewith 语句)包装它,并有一个标志,如果我想强制刷新。

从概念上来说,它会像:

# Some code

# Flag that I can set from outside to save or force a reset of the chache 
refresh_cache = True

if refresh_cache == False
   load_cache_of_block()
else:      
   # Beginning of the block to memoize
   a = foo()
   b = bar()
   ...
   c = stuff()
   # End of the block to memoize

   save_cache_of_block()

# ... some more code

有没有什么方法可以做到这一点而不必显式地 pickle 代码中定义或更改的每个变量? (即在第一次运行结束时我们保存,稍后我们只重用这些值)

最佳答案

如何使用 locals() 获取局部变量列表,将它们存储在 pickle 中的字典中,然后使用(下面更具概念性):

for k,v in vars_from_pickle:
  run_string = '%s=%s' % (k,v)
  exec(run_string)

恢复您的本地堆栈。也许最好使用列表而不是字典来保留堆栈顺序。

关于python - 在 Python 中内存整个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25414200/

相关文章:

python - GradienTape 收敛速度比 Keras.model.fit 慢得多

python - 使用外部 Python 程序在 OpenOffice 上加载文档

python - 使用 joblib.Memory 在 AWS S3 中缓存数据

python - 使用 Sklearn 的算法模型持久性

python - Joblib 的 Loky 后端如何处理对全局变量的访问?

Python:帮助改进递归函数

python - grpc-Python max_workers 限制同时进程数

C++ vector 和内存运行时错误问题

python - 使用 functools.lru_cache 时最大递归深度更快达到

recursion - 递归记忆化比递归慢