私のプログラムは、コマンドラインから整数値を受け取るchallenges
という1つの引数を取ります。私は、自己定義された方法generation
へchallenges
の値を渡すことによってmultiprocessing
を使用したい:クラスGenParentClass
にマルチプロセッシングを使用してメソッドに引数を渡すことはできません.Pool
import multiprocessing
gen = generator.GenParentClass()
mlp = multiprocessing.Pool(processes=multiprocessing.cpu_count())
X, y = mlp.imap_unordered(gen.generation, [args.challenges])
方法generation
をこの単純なシグネチャがあります。
def generation(self, num):
#some stuff
はしかし、私はこのエラーを取得します:
Traceback (most recent call last):
File "experiments.py", line 194, in <module>
X, y = mlp.imap_unordered(gen.generation, [args.challenges])
File "/anaconda/lib/python2.7/multiprocessing/pool.py", line 668, in next
raise value
cPickle.PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
この問題の解決方法はわかりません。すべて私は正しいようです!どんな助けもありがとう。
'gen'はクラスですか、それとも1つのインスタンスですか? – martineau
@martineau 'gen'は' GenParentClass'クラスのインスタンスです – Medo
'generation()'メソッドを使ってそれをスタンドインクラスのインスタンスにすると、別のエラーが発生します: 'ValueError:アンパックする値が足りません(期待された2、1を得た)。質問を編集し、問題を再現するのに十分なコードを追加してください。 [** _最小限で完全で検証可能なサンプルを作成する方法_ **](https://stackoverflow.com/help/mcve)を参照してください。また、メインタスクのコードの適切な場所に 'if __name__ == '__main __':'を追加しました。 – martineau