2016-12-29 1 views
1

코드에서 다중 처리를 구현하려고하므로 일부 예제로 학습을 시작할 것이라고 생각했습니다. 이 documentation에있는 첫 번째 예제를 사용했습니다.AttributeError를 제공하는 다중 처리 예제

from multiprocessing import Pool 
def f(x): 
    return x*x 

if __name__ == '__main__': 
    with Pool(5) as p: 
     print(p.map(f, [1, 2, 3])) 

위 코드를 실행하면 AttributeError: can't get attribute 'f' on <module '__main__' (built-in)>이 표시됩니다. 왜이 오류가 발생하는지 알 수 없습니다. 또한 도움이된다면 파이썬 3.5도 사용하고 있습니다.

+0

나를 위해 완벽하게 작동합니다 (또한 파이썬 3.5). –

+0

네, 파이썬 3.5에서도 작동합니다. –

+0

필자는 Jupyter Notebook과 anaconda를 인터프리터로 사용하고 있다고 덧붙여 야합니다. 하지만 아나콘다는 python 3.5를 사용하고 있습니다. – PiccolMan

답변

6

이 문제는 다중 처리의 디자인 기능인 것으로 보입니다. https://bugs.python.org/issue25053을 참조하십시오. 어떤 이유에서 풀은 가져온 모듈에서 정의되지 않은 객체에서는 항상 작동하지 않습니다. 따라서 함수를 다른 파일에 작성하고 모듈을 가져와야합니다.

파일 : defs.py

def f(x): 
    return x*x 

파일 : run.py

from multiprocessing import Pool 
import defs 

if __name__ == '__main__': 
    with Pool(5) as p: 
     print(p.map(defs.f, [1, 2, 3])) 

당신이 인쇄 또는 다른 내장 함수를 사용하는 경우, 예를 작동합니다. 이것이 (링크에 따라) 버그가 아니라면, 주어진 예제가 잘못 선택됩니다.

+0

스크립트를 실행할 때 AttributeError : __exit__을 얻었습니다. 문제는 "_ _ enter _"및 "_ _ exit _ _"메서드가있는 개체가 필요한 "with"문으로 나타났습니다. 그래서 그것을 바꾸어야했습니다 : p = Pool (5) 그리고 그것은 효과가있었습니다. 고마워요! –

관련 문제