2017-09-15 90 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