2017-12-06 12 views
0

の酸洗とのエラー、私は以下のクラスでのpythonモジュールをcythonizeしたいと思います:cython化されたクラスでdaskを使用します。オブジェクトメソッド

class C: 
    def __init__(self, x): 
     self.x = x 

    @staticmethod 
    def f(k): 
     return k 

    def g(self, k): 
     return self.x, k 

cythonizedモジュールのインストール後、私はコードを実行しようとしている:

from dask import delayed, multiprocessing 
c = C(3) 
l = [] 
for i in range(10): 
    l.append(delayed(c.f)(i)) 

results = delayed(l).compute(num_workers=2, get=multiprocessing.get) 

酸洗いのエラーがあります(静的メソッドと非静的メソッドで同じです)。

~/anaconda/envs/cython_env/lib/python3.6/site- 
packages/cloudpickle/cloudpickle.py in save_global(self, obj, name, 
pack) 
    621    self.save_dynamic_class(obj) 
    622   else: 
--> 623    raise pickle.PicklingError("Can't pickle %r" % obj) 
    624 
    625  dispatch[type] = save_global 

PicklingError: Can't pickle <cyfunction C.f at 0x113582b10> 

なぜそれが起こりますか?

答えて

0

マルチプロセッシングを使用する場合は、共有オブジェクトまたは変数を使用しないでください。あなたはマルチスレッドでそれを使うことができます。あなたの場合、クラスCが問題です。同じオブジェクトをcに渡すと、

関連する問題