2017-09-15 7 views
0

クラスメソッドにマルチプロセッシングを使用したいと思います。このanswerからPoolmultiprocessingはクラスメソッドを直接pickleできないことがわかりましたが、クラス外の関数を定義することでその回避策があり、その関数に追加の引数を追加しました(同様の提案もこのblogにあります) 。そこで、私はMyClassの並列プログラムを使って、これを実現しようとしました。funと並行しています。しかし、結果は得られません(バグはありません)。私は何かが欠けているようですが、私はほとんどそこにいると感じています!すべての修正は本当に感謝しています。クラスメソッドのマルチプロセッシング

import multiprocessing 


class MyClass: 
    def __init__(self): 
     pass 

    def fun(self, myList): 
     print myList 


def unwrap_fun(obj, myList): 
    return obj.fun(myList) 


obj = MyClass() 
mlp = multiprocessing.Pool(processes=multiprocessing.cpu_count()) 
mlp.imap_unordered(unwrap_fun, (obj, range(1, 10))) 

答えて

1

あなたのメインプロセスからclose()join()を呼び出す必要があります。試してください:

import multiprocessing 

class MyClass: 
    def fun(self, myList): 
     print myList 

def unwrap_fun(myList): 
    obj = MyClass() 
    return obj.fun(myList) 

if __name__ == '__main__': 
    mlp = multiprocessing.Pool(processes=multiprocessing.cpu_count()) 
    mlp.imap_unordered(unwrap_fun, range(1, 10)) 
    mlp.close() 
    mlp.join() 
+0

ありがとうございます。 – Medo

関連する問題