7

こんにちは私は朝の大部分でこれに苦労していて、誰かが私を正しい方向に向けることができることを望んでいました。

これは私が現在持っているコードです:

def f(tup):
    return some_complex_function(*tup)

def main():

    pool = Pool(processes=4) 
    #import and process data omitted 
    _args = [(x.some_func1, .05, x.some_func2) for x in list_of_some_class]
    results = pool.map(f, _args)
    print results

私が得る最初のエラーは次のとおりです。

> Exception in thread Thread-2: Traceback (most recent call last):  
> File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
>     self.run()   File "/usr/lib/python2.7/threading.py", line 504, in run
>     self.__target(*self.__args, **self.__kwargs)   File "/usr/lib/python2.7/multiprocessing/pool.py", line 319, in
> _handle_tasks
>     put(task) PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed

どんな助けでも大歓迎です。

4

2 に答える 2

9

multiprocessモジュールはモジュールを使用して、別のプロセスで実行されるpickle関数 ( ) に渡された引数をシリアル化します。f

組み込み型の多くは pickle 化できますが、インスタンス メソッドは pickle 化できません。それで.05結構ですが、そうでx.some_func1はありません。ピクルス化およびアンピクルス化できるものを参照してください。詳細については。

簡単な解決策はありません。インスタンスメソッドを引数として渡す必要がないように (または を使用しないようにmultiprocess)、プログラムを再構築する必要があります。

于 2013-01-22T17:57:18.977 に答える