multiprocessing
의 포크가 pathos
에있는 것처럼 여러 인수를 허용하는 맵 함수를 사용할 수 있습니다.
>>> from pathos.multiprocessing import ProcessingPool as Pool
>>>
>>> def add_and_subtract(x,y):
... return x+y, x-y
...
>>> res = Pool().map(add_and_subtract, range(0,20,2), range(-5,5,1))
>>> res
[(-5, 5), (-2, 6), (1, 7), (4, 8), (7, 9), (10, 10), (13, 11), (16, 12), (19, 13), (22, 14)]
>>> Pool().map(add_and_subtract, *zip(*res))
[(0, -10), (4, -8), (8, -6), (12, -4), (16, -2), (20, 0), (24, 2), (28, 4), (32, 6), (36, 8)]
pathos
여러 입력하면 쉽게 둥지 계층 병렬지도를 할 수 있습니다, 그래서 우리는 그것을 설명하기 위해 예를 확장 할 수 있습니다.
>>> from pathos.multiprocessing import ThreadingPool as TPool
>>>
>>> res = TPool().amap(add_and_subtract, *zip(*Pool().map(add_and_subtract, range(0,20,2), range(-5,5,1))))
>>> res.get()
[(0, -10), (4, -8), (8, -6), (12, -4), (16, -2), (20, 0), (24, 2), (28, 4), (32, 6), (36, 8)]
더 재미있는 것은 우리가 풀에 전달할 수있는 중첩 기능을 만드는 것입니다. pathos
은 dill
을 사용하므로 파이썬에서 거의 모든 것을 직렬화 할 수 있기 때문에 가능합니다.
>>> def build_fun_things(f, g):
... def do_fun_things(x, y):
... return f(x,y), g(x,y)
... return do_fun_things
...
>>> def add(x,y):
... return x+y
...
>>> def sub(x,y):
... return x-y
...
>>> neato = build_fun_things(add, sub)
>>>
>>> res = TPool().imap(neato, *zip(*Pool().map(neato, range(0,20,2), range(-5,5,1))))
>>> list(res)
[(0, -10), (4, -8), (8, -6), (12, -4), (16, -2), (20, 0), (24, 2), (28, 4), (32, 6), (36, 8)]
표준 라이브러리 외부로 갈 수없는 경우에는 다른 방법으로해야합니다. https://github.com/uqfoundation
여기에 설명 : Python multiprocessing pool.map for multiple arguments이
여기
pathos
가하기 (영업의 게시물에 코멘트에 @Roberto에 의해 언급) : 여기에 본 그 경우에 가장 좋은 방법은multiprocessing.starmap
을 사용하는 것입니다 http://stackoverflow.com// 다중 인스턴스를위한 파이썬 멀티 프로세싱 - pool-map-for-multiple-arguments (JF Sebastien의 "star"메소드를 성공적으로 사용했습니다) – Roberto다중 처리를 사용할 때마다 close/join과 함께 try/finally 절을 사용하십시오.()를 호출하여 오류가 발생하면 프로세스가 닫히도록합니다. http://stackoverflow.com/questions/30506489/python-multiprocessing-leading-to-many-zombie-processes – zeehio