2017-11-15 14 views
3

enter image description hereJupyter 노트북은 멀티 프로세싱을 사용하여 처리 (파이썬 3)

Jupyter 노트북 나는 기본적으로, 나는 아직도 멀티의 기능을 배우고 모듈을 멀티 프로세싱을 사용하고

완료되지 않았다. Dusty Phillips의 책을 사용하고 있으며이 코드는이 책에 속합니다. 하고 Windows PowerShell (안 jupyter 노트북에) 내가 볼에

import multiprocessing 
import random 
from multiprocessing.pool import Pool 

def prime_factor(value): 
    factors = [] 
    for divisor in range(2, value-1): 
     quotient, remainder = divmod(value, divisor) 
     if not remainder: 
      factors.extend(prime_factor(divisor)) 
      factors.extend(prime_factor(quotient)) 
      break 
     else: 
      factors = [value] 
    return factors 

if __name__ == '__main__': 
    pool = Pool() 
    to_factor = [ random.randint(100000, 50000000) for i in range(20)] 
    results = pool.map(prime_factor, to_factor) 
    for value, factors in zip(to_factor, results): 
     print("The factors of {} are {}".format(value, factors)) 

Process SpawnPoolWorker-5: 
Process SpawnPoolWorker-1: 
AttributeError: Can't get attribute 'prime_factor' on <module '__main__' (built-in)> 

셀이 실행 끝나지 않아 이유를 모르겠어요 다음?

답변

3

다른 ide에서와 같이 주피터 노트의 문제는 디자인 기능 인 것 같습니다. 따라서 우리는 다른 파일에 함수 (prime_factor)를 작성하고 모듈을 가져와야합니다. 또한 조정을해야합니다. 예를 들어, 내 경우에는, 내가 defs.py로 알려진 파일로 기능을 코딩 한이

def prime_factor(value): 
    factors = [] 
    for divisor in range(2, value-1): 
     quotient, remainder = divmod(value, divisor) 
     if not remainder: 
      factors.extend(prime_factor(divisor)) 
      factors.extend(prime_factor(quotient)) 
      break 
     else: 
      factors = [value] 
    return factors 

그런 다음 jupyter 노트북에서 나는이 내 문제를 해결

import multiprocessing 
import random 
from multiprocessing import Pool 
import defs 



if __name__ == '__main__': 
    pool = Pool() 
    to_factor = [ random.randint(100000, 50000000) for i in range(20)] 
    results = pool.map(defs.prime_factor, to_factor) 
    for value, factors in zip(to_factor, results): 
     print("The factors of {} are {}".format(value, factors)) 

다음 줄을 썼다

enter image description here