2009-04-11 7 views
5

Process 클래스를 하위 클래스로 만들어 EdgeRenderer라고 부릅니다. multiprocessing.Pool을 사용하고 싶습니다. 정규 Process 대신에 EdgeRenderer의 인스턴스가되도록하고 싶습니다. 가능한? 방법?파이썬 다중 처리 : 사용자 정의 프로세스 풀

+0

는이 방법으로 멀티 스레딩을 사용하도록 코드를 작성하려고 ? –

+0

다중 처리. –

답변

3

: 또는, 당신은 당신이 매핑에 사용하는 호출 객체로 기능을 구축 할 수 있습니다 그것은 현재 API에서 지원되지 않습니다,하지만 나쁘지 않을 것

부가. 나는/2.6.3 3.1이 주 python2.7에 추가 살펴 보겠습니다

이 작동하는 것 같다
2

API에서이 문제가 발생하지 않습니다. initializerinitargs 인수를 사용하여 원하는 기능을 복제 할 수 있습니다. 제시 Noller에서

class EdgeRenderTask(object): 
    def op1(self,*args): 
     ... 
    def op2(self,*args): 
     ... 
p = Pool(processes = 10) 
e = EdgeRenderTask() 
p.apply_async(e.op1,arg_list) 
p.map(e.op2,arg_list) 
+0

클래스를'p.map'의 인자로 넘겨 줄 수 없다면 피클 에러가 나옵니다. 이 문제를 해결할 수있는 유일한 방법은 일종의 커스텀'pool.map'을 구현하는 것입니다. 불행히도 더 많은 라인이 필요합니다. – catwalker333

2

:

import multiprocessing as mp 

ctx = mp.get_context() # get the default context 

class MyProcess(ctx.Process): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     print("Hi, I'm custom a process") 

ctx.Process = MyProcess # override the context's Process 

def worker(x): 
    print(x**2) 

p = ctx.Pool(4) 
nums = range(10) 
p.map(worker, nums)