복붙노트

[PYTHON] Pathos로 파이썬 다중 처리

PYTHON

Pathos로 파이썬 다중 처리

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

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

멀티 프로세싱에 문제가있는 것처럼 보였습니다. 바보, 나는 패스를 시도하기로 결정했습니다. 이전 주제에서 제안한대로 시도했습니다.

import pathos.multiprocessing

하지만 오류가 발생했습니다 : 모듈 다중 처리 없음 - 최신 pathos 버전에서 찾을 수 없습니다.

그럼 나는 부 방법을 수정 해 보았습니다 :

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

이제는 오류가 발생하지 않지만 foo는 작동하지 않습니다. 클래스의 인스턴스에는 새로운 속성이 없습니다. 제발 도와주세요, 왜냐하면 나는 하루를 보낸 후 다음으로 어디로 이사해야할지 모르기 때문입니다.

해결법

  1. ==============================

    1.나는 pathos 저자이다. 위 코드에서 무엇을하고 싶은지 잘 모르겠습니다. 그러나, 나는 어쩌면 약간의 빛을 발산 할 수있다. 다음과 비슷한 코드가 있습니다.

    나는 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 메소드가 호출되어 b.boo가 새로운 파이썬 프로세스로 전달 된 다음 각각의 중첩리스트를 평가하는 것입니다. 결과가 정확하다는 것을 알 수 있습니다 ... len ( "12") + len ( "3") + len ( "456")은 6입니다.

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

    그러나 Pathos 내에는 위의 작업과 같은 것을 만들 계획이 있습니다. 원본 개체는 업데이트되지만 아직 작동하지 않습니다.

    편집 : pip와 함께 설치하는 경우, pathos의 최신 릴리스 버전은 몇 살이며 올바르게 설치되지 않거나 모든 하위 모듈을 설치하지 않을 수 있습니다. 새로운 pathos 릴리스가 보류 중이지만 그때까지 github에서 최신 버전의 코드를 가져 와서 설치하는 것이 좋습니다. 트렁크는 개발 중에 대부분 안정적입니다. 나는 당신의 문제가 모든 패키지가 설치되지 않았을 수도 있다고 생각한다. 설치시 "새로운"삐 스와 "오래된"pathos 비 호환성 때문이다. pathos.multiprocessing이 누락 된 경우 이것이 가장 큰 원인입니다.

    여기 github에서 패스를 얻으세요 : https://github.com/uqfoundation/pathos

  2. from https://stackoverflow.com/questions/26059764/python-multiprocessing-with-pathos by cc-by-sa and MIT license