인프런 커뮤니티 질문&답변

장순호님의 프로필 이미지
장순호

작성한 질문수

[NLP] IMDB 영화리뷰 감정 분석을 통한 파이썬 텍스트 분석과 자연어 처리

멀티 프로세싱 오류 질문입니다

작성

·

964

1

현재 텍스트 분석과 자연어 처리 과정 수강하고 있으며
선생님께서 공유해주신 github주소는 아래와 같습니다.
 
https://github.com/corazzon/KaggleStruggle/blob/master/word2vec-nlp-tutorial/tutorial-part-1.ipynb
 
 
github 중 아래 코드까지는 잘 실행되나
 
# http://www.racketracer.com/2016/07/06/pandas-in-parallel/ from multiprocessing import Pool, TimeoutError import time import os import numpy as np def _apply_df(args): df, func, kwargs = args return df.apply(func, **kwargs) def apply_by_multiprocessing(df, func, **kwargs): # 키워드 항목 중 workers 파라메터를 꺼냄 workers = kwargs.pop('workers') # 위에서 가져온 workers 수로 프로세스 풀을 정의 pool = Pool(processes=workers) # 실행할 함수와 데이터프레임을 워커의 수 만큼 나눠 작업 result = pool.map(_apply_df, [(d, func, kwargs) for d in np.array_split(df, workers)]) pool.close() # 작업 결과를 합쳐서 반환
 
상기 코드 후 아래 코드 부터는 실행이 되지 않고 오류가 발생합니다.
 
코드
%time clean_train_reviews = apply_by_multiprocessing(\ train['review'], review_to_words, workers=4)
 
오류
AttributeError: Can't get attribute '_apply_df' on <module '__main__' (built-in)>
 
 
상기 오류 관련하여 아래 사이트 내용을 확인해 보았고 그래도 해답을 찾기 어려워 이렇게 글을 남기게 되었습니다.
https://www.inflearn.com/questions/21486
https://www.inflearn.com/questions/40850
 
 
마지막으로 아래와 같이 처리하면 해결될 것이라고 포털에 있는 내용 확인했는데
아래는 어떻게 해야할지 몰라 진행을 못하고 있습니다.
 
현재 상기 멀티프로세싱 오류에서 막혀 진도가 전혀 나가지 못해서...
관련하여 도움 부탁드리겠습니다.
 
감사합니다.
 
[Python] Multiprocessing 에서 AttributeError 발생# Error Message
AttributeError: can't get attribute 'f' on <module '__main__' (built-in)>
Child Process 에서 해당 모듈을 "import" 해야한다.
 
Error 가 발생하고 있는 'f' 함수를 별도 파일로 작성하고 import 하여 적용하여 해결한다.
 
or
 
https://makerj.tistory.com/236

답변 1

0

박조은님의 프로필 이미지
박조은
지식공유자

안녕하세요.

올려주신 내용을 보면 멀티프로세싱 파일을 import 하지 않아서 발생한 오류로 보여집니다.

실습하고 있는 소스코드의 URL을 알려주시면 보고 어느 부분이 오류인지 도움을 드릴 수 있을 것 같습니다.

이미 다른 질문을 봤지만 해결을 못했다고는 했지만,

파트1 이라면 다음의 링크에서 먼저 코드를 실행해 보세요.

https://colab.research.google.com/drive/1SDYmXGDY29WHnhx9gbHbhmTYfQcpXboF

colab 을 실행하고 순차적으로 실행해야 합니다.

중간 부터 실행하거나 실행 순서가 다르면 오류가 발생합니다.

장순호님의 프로필 이미지
장순호
질문자

답변 감사합니다. 

말씀하신대로 구글 코랩에서 실행하니 잘 실행됩니다.

 

그런데 개인적으로 궁금한 점이 주피터 랩에서는 

코랩과 동일하게 코드 입력(멀티프로세싱 파일을 import  등)하고 

아래 코드 입력만 하면 멀티프로세스 에러가 발생하는데

이유가 무엇인지 개인적으로 궁금합니다.

개인 노트북이라 멀티프로세싱에 적합하지 않아서 그런건지 개인적으로 

많이 궁금하긴 합니다.

 

그럼 답변 부탁드리겠습니다.

 

주피터 랩에서는 아래 코드부터 에러 발생 또는 실행이 안됨. 이유가 궁금함.

%time clean_train_reviews = apply_by_multiprocessing(\
    train['review'], review_to_words, workers=4

 

[Python] Multiprocessing 에서 AttributeError 발생# Error Message
AttributeError: can't get attribute 'f' on <module '__main__' (built-in)>

 

박조은님의 프로필 이미지
박조은
지식공유자

안녕하세요. 올려주신 오류 메시지를 구글링 해보니 import 가 제대로 되지 않았을 때 해당 오류가 발생할 수 있다고 합니다.

아래의 코드와 함수가 불러와졌는지 확인해 보세요. 

 
from multiprocessing import Pool
import numpy as np

def _apply_df(args):
df, func, kwargs = args
return df.apply(func, **kwargs)

def apply_by_multiprocessing(df, func, **kwargs):
# 키워드 항목 중 workers 파라메터를 꺼냄
workers = kwargs.pop('workers')
# 위에서 가져온 workers 수로 프로세스 풀을 정의
pool = Pool(processes=workers)
# 실행할 함수와 데이터프레임을 워커의 수 만큼 나눠 작업
result = pool.map(_apply_df, [(d, func, kwargs)
for d in np.array_split(df, workers)])
pool.close()
# 작업 결과를 합쳐서 반환
return pd.concat(list(result))
장순호님의 프로필 이미지
장순호

작성한 질문수

질문하기