我正在评估莳萝,我想知道这种情况是否得到处理。我有一个案例,我在 python 进程中成功导入了一个模块。我可以使用 dill 进行序列化,然后将该模块加载到具有不同 sys.path 且不包含该模块的不同进程中吗?现在我遇到导入失败,但也许我做错了什么。
这是一个例子。我运行这个脚本,其中 foo.py 模块的路径在我的 sys.path 中:
% cat dill_dump.py
import dill
import foo
myFile = "./foo.pkl"
fh = open(myFile, 'wb')
dill.dump(foo, fh)
现在,我在我的 PYTHONPATH 中没有 foo.py 目录的地方运行这个脚本:
% cat dill_load.py
import dill
myFile = "./foo.pkl"
fh = open(myFile, 'rb')
foo = dill.load(fh)
print foo
此堆栈跟踪失败:
Traceback (most recent call last):
File "dill_load.py", line 4, in <module>
foo = dill.load(fh)
File "/home/b/lib/python/dill-0.2.4-py2.6.egg/dill/dill.py", line 199, in load
obj = pik.load()
File "/rel/lang/python/2.6.4-8/lib/python2.6/pickle.py", line 858, in load
dispatch[key](self)
File "/rel/lang/python/2.6.4-8/lib/python2.6/pickle.py", line 1133, in load_reduce
value = func(*args)
File "/home/b/lib/python/dill-0.2.4-py2.6.egg/dill/dill.py", line 678, in _import_module
return __import__(import_name)
ImportError: No module named foo
那么,如果我需要在两个进程之间有相同的 python 路径,那么序列化 python 模块有什么意义呢?或者换句话说,通过 dill 加载 foo 比仅仅调用“import foo”有什么优势吗?