2014-09-26 9 views
8

멀티 코어 프로세서로 계산을 가속화하기 위해 파이썬의 패스를 사용하여 계산을 별도의 프로세스로 지정하려고합니다. 내 코드는 다음과 같이 정리되어 있습니다 :Pathos로 파이썬 다중 프로세싱

class: 
    def foo(self,name): 
    ... 
    setattr(self,name,something) 
    ... 
    def boo(self): 
     for name in list: 
     self.foo(name) 

다중 처리와 관련된 문제는 피할 수 없었습니다.

import pathos.multiprocessing 

를하지만 오류가 발생했습니다 : 이전 항목에 제안 나는, 시도하지 않음 모듈 멀티 - 나는의 최신 비애 버전을 찾을 수 없습니다. 내 클래스의 인스턴스는 새로운 속성이 없습니다 -

def boo(self): 
import pathos 
pathos.pp_map.pp_map(self.foo,list) 

지금 발생 에러가 없지만, foo는 작동하지 않습니다

은 그 때 나는 야유 방법을 수정했습니다. 제발 도와주세요, 왜냐하면 나는 하루를 보낸 후 다음으로 어디로 이사해야할지 모르기 때문입니다.

답변

17

저는 pathos입니다. 위 코드에서 무엇을하고 싶은지 잘 모르겠습니다. 그러나 나는 약간의 빛을 비춰 줄 수있다.

>>> from pathos.multiprocessing import ProcessingPool 
>>> class Bar: 
... def foo(self, name): 
...  return len(str(name)) 
... def boo(self, things): 
...  for thing in things: 
...  self.sum += self.foo(thing) 
...  return self.sum 
... sum = 0 
... 
>>> b = Bar() 
>>> results = ProcessingPool().map(b.boo, [[12,3,456],[8,9,10],['a','b','cde']]) 
>>> results 
[6, 4, 5] 
>>> b.sum 
0 

그래서 위에서 무슨 일이 b.boo가 중첩 된 목록에 각각 다른 새 파이썬 프로세스에 전달하고 평가 곳에 Bar 예를 bboo 메서드를 호출 할 것입니다 : 여기에 몇 가지 유사한 코드입니다. 결과가 정확하다는 것을 알 수 있습니다 ... len ("12") + len ("3") + len ("456")은 6입니다.

그러나 b.sum을 보면 신비하게도 0입니다. b.sum이 여전히 0 인 이유는 무엇입니까? 글쎄, multiprocessing (따라서 또한 pathos.multiprocessing)은 다른 파이썬 프로세스에 맵을 통해 전달한 내용을 COPY으로 만든 다음 복사 된 인스턴스를 (병렬로) 호출 한 다음에 호출 된 결과를 반환합니다. 메소드가 호출되었습니다. RETURN 결과를 출력하거나 인쇄하거나 기록하거나 파일로 보내거나 다른 방법으로 보내야합니다. 예상했던대로 원래 인스턴스로 되돌릴 수 없습니다. 원래 인스턴스가 다른 프로세서로 전송 되었기 때문입니다. 인스턴스의 복사본이 생성되고 폐기 된 다음 각 인스턴스는 sum 속성이 증가되었지만 원래의 b.sum은 변경되지 않았습니다.

그러나 pathos 내에 예상 한대로 위의 작업을 수행 할 계획이 있습니다. 원래 개체 IS이 업데이트되었지만 아직 작동하지 않습니다.

편집 : 당신이 pip와 함께 설치하는 경우는, pathos의 최신 릴리스 버전은 몇 살이며, 제대로 설치되지 않을 수 있습니다, 또는 서브 모듈을 모두 설치되지 않을 수 있습니다. 새로운 pathos 릴리스가 보류 중이지만, 그때까지 github에서 최신 버전의 코드를 구하여 설치하는 것이 좋습니다. 트렁크는 개발 중에 대부분 안정적입니다. "새로운"pip - "오래된"pathos 설치에 호환성이 없어서 모든 패키지가 설치되지 않았을 수 있습니다. pathos.multiprocessing이 누락 된 경우 이것이 가장 가능성이 큰 범인입니다.

여기 github의에서 pathos를 가져 오기 :

+0

https://github.com/uqfoundation/pathos 내가 여기 영업 이익과 같은 문제가 있습니다. 'import pathos'를 할 수는 있지만'import pathos.multiprocessing'는 모듈을 찾을 수 없다는 오류를줍니다. 그 이유는 무엇일까요? – sashkello

+0

문제는, OP의 질문을 이해하지 못합니다 ... 영어의 장벽과 최소 코드 샘플로 인해서입니다. 어쩌면 다른 접근법을 시도해 볼 수도 있습니다. 어쩌면 모든 의존성이 설치되지 않았을 수도 있습니다. '수입 처리'할 수 있습니까? 어때요'processing.pool import pool' 에서요? 어떻게'pathos.helpers import mp_helper' 또는'from pathos.helpers import ProcessPool'을 사용합니까? 'import pp'와'from pathos.helpers import pp_helper'는 어떨까요? –

+0

'from pathos.helpers import *'는 "No helper named 모듈"을 제공합니다. 여하튼 모든 파토스가 나를 위해 이용 가능하지 않고 OP로 보인다. 나는 pip에서 그것을 설치했다, 최신 버전이다. – sashkello