2017-09-15 3 views
0

클래스 메서드에 다중 처리를 사용하고 싶습니다. 이 answermultiprocessing에있는 Pool이 클래스 메서드를 직접 피할 수는 없지만 클래스 외부의 함수를 정의하여 해결 방법이 있으며 그 함수에 추가 인수를 추가하는 것으로 나타났습니다 (비슷한 제안은 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