5
私は2つの引数をとり、それをmultiprocessing.Pool
に追加して並列化できる関数を作成しようとしています。 この単純な関数を書くときにいくつかの問題がありました。Python:マップとマルチプロセッシングを使用
df = pd.DataFrame()
df['ind'] = [111, 222, 333, 444, 555, 666, 777, 888]
df['ind1'] = [111, 444, 222, 555, 777, 333, 666, 777]
def mult(elem1, elem2):
return elem1 * elem2
if __name__ == '__main__':
pool = Pool(processes=4)
print(pool.map(mult, df.ind.astype(int).values.tolist(), df.ind1.astype(int).values.tolist()))
pool.terminate()
それはエラーを返します:
TypeError: unsupported operand type(s) for //: 'int' and 'list'
私が間違っているかを理解することはできません。 誰でもこのエラーの意味と解決方法を説明できますか?
テストケースをセットアップするのを躊躇しました。 GILを避けてCで動かすために 'pandas'が内部的に扱うことはできませんか?プールの作成とそれを調整するオーバーヘッドは、OPの難しさを修正しても賢明ではないということですか? – roganjosh
パンダで入力を適切に作成して、拡張性を高める方法があると確信しています。オーバヘッドが行く限り、それはおそらくアプリケーション固有のものになるので、私が答えるのは難しいでしょう。正直言って、私はマルチプロセッシングを使うのがちょっと新しいので、あなたの質問に対する最良の答えを知っているとは思えません。しかし、私はOPが持っている特定の問題にぶつかってきました。 – tmwilson26
私は今夜自分のテストケースを手に入れることができないかもしれませんが、私は調査します。マルチプロセスは、プロセスの生成に大きなオーバヘッドがあります。このアプローチを無効にするという点では、単純にベクトル化できると私は理解しています。私はあなたがきちんと質問に答えるので、私はupvotedしかし、私はちょうどアプローチの前提に欠陥があると思うが、自分自身を学ぶ:) – roganjosh