본문 바로가기

컴린이 일기장/Today I Learned

[TIL] Python Multiprocessing

반응형

[주절주절]

연구가 마음만큼 잘 안된다😱🤯😬🤪🥴🤮🤕
그래도 저 잘 살아있어요 !.!

 

[Today I Learned]

데이터를 가공하거나 정리할 때 폴더에 있는 모든 이미지를 대상으로 반복문을 작성해야할 때가 있다. 2~30000장 밖에 안되는 데이터임에도 시간을 꽤나 잡아먹는데, 이런 일이 말씀드렸더니 Multiprocessing을 이용해보라는 코멘트를 주셔서 찾아보게 되었다.

# Multi processing

Multi processing을 활용하면 복잡하고 시간이 걸리는 작업을 별도의 프로세스를 생성 후, 병렬 처리해 보다 빠른 응답속도처리 속도를 기대할 수 있다는 장점이 있다. 

이론 자체는 1학년 전공기초 과목에서 배웠는데 다 까먹었다. 그땐 이런걸 왜 배우나 했지
프로세스: 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립 개체) / OS로부터 시스템 자원(ex. cpu 시간, 메모리 영역 등)을 할당받는 작업의 단위

+ 프로세스가 차지하는 메모리는 크게 Code, Data, Heap, Stack의 영역으로 나뉜다. 

스레드: 프로세스 내에서 실행되는 여러 흐름의 단위. 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있다. 스레드는 프로세스 내에서 Stack만 따로 할당받고, Code, Data, Heap 영역은 공유한다. 

 

 

 

# multiprocessing.Pool

무작정 간단한 예제를 따라해보았다.

1. 컴퓨터 코어 개수 확인

 

 

2. Pool 객체 초기화

 

 

이 때 processes 인자가 주어지지 않은 경우에는 시스템에 있는 코어의 수와 동일한 수의 워커가 생성된다.
Pool은 입력 받은 job을 process에 분배하여 함수 실행의 병렬처리를 도와준다. 

3. 일 시키기 🏃🏻‍♀️

 

 

우선 시킬 일(?)을 함수로 정의한다.

 

 

그리고 Pool class의 map 함수를 이용해 일을 시킨다. 

pool.close()와 pool.join()을 쓰는 이유에 대한 한글 자료는 찾지 못했는데, Stackoverflow에서 다음과 같은 자료를 찾을 수 있었다. (정확하게 이해는 잘 안감)

 

 

위의 내용들을 서치하다보니 데이터 split, Parmap 이용 등 또 다른 내용들을 확인할 수 있었다. 다음에 multiprocessing을 이용할 일 있을 때 주의해서 찾아봐야겠다. ✍🏻

+ 04.06

: 오늘 데이터 전처리 때 사용할 일이 있어서 열심히 코드 작업했는데... 로컬에서는 가벼운 태스크도 안돌아갔다. 다행히 remote 서버에서 작업하려던거라 여차저차 마무리는 했는데... 뭐가 문제일지?! 🤣

 

[질문 노트]

 

 

반응형