2017-10-23 9 views
-2

파이썬 - ImportError를 : 이름을 가져올 수 없습니다 '풀'

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])) 

multiprocessing.py (아래 파일의 내용을) 실행하는 동안 내가 할 ImportError를 : 이름을 가져올 수 없습니다 '풀'

I 이 두 솔루션을 시도했다 - python - ImportError: cannot import name Pool하지만 불행히도 문제가 존재합니다.

+0

시스템에 대한 정보를 추가하고 파이썬을 설치 한 방법이 실제로 도움이 될 수 있습니다. –

+0

새로 시작된 파이썬 인터프리터에서 '다중 처리 가져 오기 풀'만 실행하면 어떻게됩니까? –

+2

모듈을 사용하려는 다른 모듈과 같은 이름으로 지정하지 마십시오. 표준 라이브러리에있는 모듈 대신 자신의 모듈을 가져옵니다. – Goyo

답변

0

가져 오기 오류를 없애려면 multiprocessing.py 대신 파일 이름을 지정해야합니다. 파일 이름은 모듈 이름과 같으면 안됩니다.

파일 이름이으로 바뀌고 풀 기능을 가져올 수 있으며 코드가 python3에서 작동해야합니다. 하지만 python2를 사용한다면 코드가 작동하지 않습니다.

파이썬 2.x 및 3.0, 3.1 및 3.2에서 다중 처리 .Pool() 객체는 컨텍스트 관리자이 아닙니다. 당신은 성명서와 함께 사용할 수 없습니다. 파이썬 3.3 이상에서만 그걸 그대로 사용할 수 있습니다. 파이썬 3 multiprocessing.Pool() 문서에서

: 코드 아래

New in version 3.3: Pool objects now support the context management protocol – see Context Manager Types. enter() returns the pool object, and exit() calls terminate().

은 python2에서 작동합니다

from multiprocessing import Pool 

def f(x): 
    return x*x 

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

출력

[1, 4, 9] 
+1

어쨌든 '수영장'을 가져올 수없는 경우 어떻게 달라질 수 있습니까? – Goyo

0

당신이 시도하고 라이브러리를 가져 python은 특정 일련의 단계에서 모듈 이름을 검색합니다. 따라서 파일 이름을 모듈 이름과 동일하게 지정하면 라이브러리가 아닌 파일을로드합니다. 파일에는 풀 기능이 없으므로 파일을 가져올 수 없습니다. 다중 처리가 내장 모듈 인 경우이 오류는 발생하지 않지만 파이썬 라이브러리 또는 모듈과 동일한 파일 이름을 지정하는 것은 바람직하지 않습니다.

이 프로세스를 더 잘 이해하려면 여기에 수락 된 대답을 참조하십시오. How does python find a module file if the import statement only contains the filename?

+0

더 추가하려면 inbuilt 모듈과 동일한 이름을 붙이면 맨 위의 불어를 사용하여 문제를 해결해야합니다. from __future__ import absolute_import – kmcodes