본문 바로가기
프로그래밍/기타 Python 모듈

[오류 해결] Pyinstaller : ValueError: not enough values to unpack (expected 2, got 1)

by 부자 꽁냥이 2023. 3. 17.

회사 서버에서 Pyinstaller를 사용하다가 아래와 같은 오류가 발생한 적이 있다.


File "Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_multiprocessing.py",

line 46, in _freeze_support
ValueError: not enough values to unpack (expected 2, got 1)


오류만 발생하면 다행이지만 회사 서버(Window)에서 실행 프로세스가 무한정으로 늘어났다. 작업관리자에서 '작업 끝내기'를 해도 소용없었다. 어쩔 수 없이 내 계정을 로그 아웃해야 했다. ㅠㅠ


   오류 해결

오류가 발생한 원인은 위 메시지 뒤에 나오는 메시지

 

joblib.externals.loky.process_executor.TerminatedWorkerError

 

로 어느 정도 추측할 수 있었다. joblib은 기본적으로 loky 백엔드를 사용한다고 한다. 하지만 worker에서 input, output 교환시 메모리 오버헤드 등의 문제가 발생할 수 있다고 한다. 위 에러는 백엔드를 loky로 사용함에 따라 worker가 무언가에 의해 강제 종료되었다는 뜻이다. 따라서 백엔드를 바꿔주면 문제는 해결될 수 있다는 것이다.

 

해결 방법은 간단하다. joblib의 parallel_backend를 사용하여 thread 기반으로 병렬 처리하도록 하면 된다고 한다(참고 자료). 즉, 아래 코드를 추가하면 된다.

from joblib import parallel_backend

parallel_backend("threading")

 

예를 들어 기존 파이썬 파일이 아래와 같다면

 

from multiprocessing import Pool, freeze_support

if __name__ == '__main__':
    freeze_support()
    ''' 중략 '''

 

다음과 같이 추가해주면 된다.

 

from multiprocessing import Pool, freeze_support
from joblib import parallel_backend
parallel_backend('threading')

if __name__ == '__main__':
    freeze_support()
    ''' 중략 '''

 


댓글


맨 위로