1

我有一个试图从命令行运行的脚本:

import ipdb
def f(): pass
import pickle
pickle.dumps(f)

这当然是简化的。实际上,我正在尝试f在 a中使用multiprocessing.Pool,因此需要对其进行腌制。使用 ipython 5.3.0 和 ipdb 0.10.2 这会产生:

PicklingError: Can't pickle <function f at 0x1071eaaa0>: it's not found as __main__.f

我相信这是因为 IPython 被覆盖,如此sys.modules['__main__']所述。

我想解决这个问题。我的一个想法是sys.modules['__main__']用当前模块替换。我可以在导入 ipdb 之前获得此参考,但我想避免这种情况(出于超出此问题范围的相当复杂的原因)。

在被覆盖后是否可以获得对当前模块的引用sys.modules?我看到我可以得到它的名字(__main__在我的例子中),但我不知道如何获得它的价值(除了通过查看sys.modules)。

4

0 回答 0