multiprocessing
のPool.map()
機能を使用して、作業を同時に分割しようとしています。次のコードを使用すると、正常に動作します。
import multiprocessing
def f(x):
return x*x
def go():
pool = multiprocessing.Pool(processes=4)
print pool.map(f, range(10))
if __name__== '__main__' :
go()
ただし、よりオブジェクト指向のアプローチで使用すると、機能しません。表示されるエラーメッセージは次のとおりです。
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup
__builtin__.instancemethod failed
これは、以下が私のメインプログラムである場合に発生します。
import someClass
if __name__== '__main__' :
sc = someClass.someClass()
sc.go()
そして以下は私のsomeClass
クラスです:
import multiprocessing
class someClass(object):
def __init__(self):
pass
def f(self, x):
return x*x
def go(self):
pool = multiprocessing.Pool(processes=4)
print pool.map(self.f, range(10))
誰もが問題が何であるか、またはそれを簡単に回避する方法を知っていますか?
PicklingError: Can't pickle <class 'function'>: attribute lookup builtins.function failed