[주절주절]
연구가 마음만큼 잘 안된다😱🤯😬🤪🥴🤮🤕
그래도 저 잘 살아있어요 !.!
[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 서버에서 작업하려던거라 여차저차 마무리는 했는데... 뭐가 문제일지?! 🤣
[질문 노트]
-
'컴린이 일기장 > Today I Learned' 카테고리의 다른 글
[TIL] 부동소수점 / 빅오(시간복잡도) / Python 자료형 (0) | 2021.07.12 |
---|---|
[TIL] Python getattr()과 import_module (0) | 2021.04.04 |
[TIL] 서버 및 기본 환경을 세팅하자! (0) | 2021.02.26 |
[TIL] Pix2Pix HD(High-resolution Image synthesis and semantic manipulation with Conditional GANs) 논문 요약 (0) | 2021.01.24 |
[TIL] 1월 둘째주~셋째주 연구실 일 (0) | 2021.01.09 |