2017-09-15 65 views
0

我想爲類方法使用多處理。我從answer中發現,Poolmultiprocessing中不能直接使用類方法,但是通過在類之外定義一個函數並向該函數添加一個附加參數(類似的建議也在此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