我有一个脚本,我试图从命令行运行:
import ipdb
def f(): pass
import pickle
pickle.dumps(f)
这当然是简化的。实际上,我试图在f
中使用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正如here所述覆盖sys.modules['__main__']
。
我想解决这个问题。我的一个想法是用当前模块替换sys.modules['__main__']
。我可以在导入ipdb之前获得此引用,但是我想避免这种情况(出于相关原因,超出了本问题的范围)。
在sys.modules
中覆盖当前模块之后,是否可以获得对当前模块的引用?我看到我可以得到它的名字(我的情况为__main__
),但我不知道如何获得它的价值(除了查看sys.modules
)。