들어가기 전에
이번 포스트는 jupyter notebook에 어느 정도 익숙해졌다고 착각한 어느 초보 개발자의뻘짓삽질을 담고 있습니다. 개인 기록의 성격이 짙으니 감안해주시길...!
파이썬 기본 라이브러리를 다루다 보면 꼭 지엽적으로만 파고 들어서 나중에 가면 "아... 이게 뭐였더라??" 하는 내용도 있고, 아예 처음 다뤄보는 라이브러리 중에는 사용법이 영 직관적이지 못해 애를 먹는 경우가 있습니다. 제 경우, 후자에 해당하는 대표적인 라이브러리가 바로 multiprocessing
모듈이었죠.
여러 개의 CPU 코어를 사용해 병렬 연산을 가능하게 해주는 만큼 이 모듈은 매우 강력한 모듈임에는 분명합니다. 문제는 이 모듈이 .py 스크립트에서만 돌아가는 것처럼 보였다는 것.
multiprocessing
모듈을 자세히 설명하는 포스트가 아니니 간단하게만 짚고 넘어가겠습니다. 위 스크립트에서is_prime_nb
는 Numba
라는 모듈을 사용해 정의한 함수로, 소수(prime number)를 찾아주는 역할을 합니다. pool이라는 객체에 병렬 연산용 코어 개수를 할당하면 주어진 함수를 여러 개의 코어로 돌릴 수 있게 해줍니다.
문제는 jupyter notebook 환경에서는 이 함수가 끝나지 않고 계속 돌아간다는 것입니다. 이렇게 특정 IDE나 개발 환경에서 어떤 코드가 돌아가지 않는다면 흔히들 코드를 먼저 수정해보기 마련입니다. 하지만 이번 경우에는 온갖 방법을 동원해 모듈이 정상적으로 돌아갈 수 있는 스크립트를 작성해도 여전히 같은 상황이 발생했습니다.
이런 경우에는 아예 .py 확장자를 갖는 스크립트로 작성해버린 뒤 정상적으로 실행하는 보는 것이 하나의 방법입니다. 위 jupyter 스크립트에서 작성했던 함수 정의, 변수, pool 객체 정의까지 .py 스크립트로 옮긴 뒤에야 정상적으로 실행이 되고, 정상적으로 종료까지 되었습니다.
이렇듯 특정 코드가 돌아가지 않을 때 실행 환경을 바꾸는 것도 문제의 해결책 중 하나가 될 수 있습니다. 비단 multiprocessing
모듈에만 적용되는 문제는 아닐 것이라 조심스레 예상해봅니다.
https://sharegpt.com/c/KzOjUSw
이 문제의 해결에 도움을 준 chatGPT 프롬프트를 공유해보고자 합니다. 실행 환경을 바꾸기 전까지 저질렀던 온갖 헛다리삽질과 고통의 흔적이 고스란히 담겨져 있습니다.
AI는 신이고 chatGPT는 무적이다
'개발 공부 - Tools and Language > 파이썬' 카테고리의 다른 글
[파이썬] 시퀀스 자료형 종합 정리 (0) | 2023.06.12 |
---|