Process 클래스를 하위 클래스로 만들어 EdgeRenderer라고 부릅니다. multiprocessing.Pool
을 사용하고 싶습니다. 정규 Process 대신에 EdgeRenderer의 인스턴스가되도록하고 싶습니다. 가능한? 방법?파이썬 다중 처리 : 사용자 정의 프로세스 풀
5
A
답변
3
: 또는, 당신은 당신이 매핑에 사용하는 호출 객체로 기능을 구축 할 수 있습니다 그것은 현재 API에서 지원되지 않습니다,하지만 나쁘지 않을 것
부가. 나는/2.6.3 3.1이 주 python2.7에 추가 살펴 보겠습니다
이 작동하는 것 같다
2
API에서이 문제가 발생하지 않습니다. initializer
및 initargs
인수를 사용하여 원하는 기능을 복제 할 수 있습니다. 제시 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)
는이 방법으로 멀티 스레딩을 사용하도록 코드를 작성하려고 ? –
다중 처리. –