4

dill を評価していますが、このシナリオが処理されるかどうかを知りたいです。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

では、2 つのプロセス間で同じ python パスが必要な場合、python モジュールをシリアル化する意味は何ですか? または、言い換えれば、「import foo」呼び出しを行うよりも、ディル経由で foo をロードする利点はありますか?

4

1 に答える 1