일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ros2 foxy tutorial
- development guides
- error
- foxy nav2
- nav2 tutorial
- nav2 튜토리얼
- ros2 configuring environment
- ros2 튜토리얼
- ros2 환경설정
- nav2 first-time robot setup guide
- ros2 foxy docker
- humble development guides
- nav2 development guides
- docker foxy
- ros2 튜토리얼 환경설정
- 코드업
- humble 환경설정
- Python
- CodeUp
- nav2 dev contatiner
- ros2 development guides
- Nav2 document
- nav2 development guides
- nav2 설치
- Foxy tutorial
- ros2 remapping
- first-time robot setup guide
- ROS FOXY 튜토리얼
- CODEUP 6073
- nav2 getting started
Archives
- Today
- Total
BAN2ARU
[Python] Multiprocessing 본문
반응형
멀티 프로세싱(multi processing)은 시간이 오래 걸리고 복잡한 여러 작업들을 별도의 프로세스에 생성하여 이를 병렬 처리(parallel processing)를 하여 작업이 좀 더 빠르게 처리할 수 있도록 한다. 다만, 이 프로세스들은 각자가 고유 메모리 영역을 가지고 있기 때문에 메모리 사용이 늘어난다는 단점이 있으므로 잘 활용해야 한다.
멀티프로세싱 예제
- 멀티프로세싱 사용여부에 따른 처리속도 비교
# 멀티프로세싱을 활용하지 않았을 때
import time
import os
#1초간 sleep하는 함수
def time_to_sleep(a):
print(a)
print(os.getpid)
time.sleep(1)
sleep_list = ['0', '1', '2', '3']
start = time.time()
for i in sleep_list :
time_to_sleep(i)
end = time.time()
print('processing time : %s seconds' %(end - start))
# 결과 화면
0 6220
1 6220
2 6220
3 6220
processing time : 4.028969049453735 seconds
# 멀티프로세싱을 활용한 경우 (프로세스 2개)
import time
import multiprocessing
import os
#1초간 sleep하는 함수
def time_to_sleep(a):
print(a , os.getpid(), end=' ')
time.sleep(1)
print(end='\n')
sleep_list = ['0', '1', '2', '3']
start = time.time()
if __name__ == '__main__' :
pool = multiprocessing.Pool(processes=2)
pool.map(time_to_sleep, sleep_list)
pool.close()
pool.join()
end = time.time()
print('processing time : %s seconds' %(end - start))
# 결과 화면
# os.getpid()를 통해 4개의 업무를 2개의 프로세스에서 각각 실행되는 것을 알 수 있음
0 5072
1 13052
2 5072
3 13052
processing time : 2.1739742755889893 seconds
# 멀티프로세싱을 활용한 경우 (프로세스 4개)
import time
import multiprocessing
import os
#1초간 sleep하는 함수
def time_to_sleep(a):
print(a , os.getpid(), end=' ')
time.sleep(1)
print(end='\n')0 3180
2 16792
1 8288
3 3720
processing time : 1.1711664199829102 seconds
sleep_list = ['0', '1', '2', '3']
start = time.time()
if __name__ == '__main__' :
pool = multiprocessing.Pool(processes=4)
pool.map(time_to_sleep, sleep_list)
pool.close()
pool.join()
end = time.time()
print('processing time : %s seconds' %(end - start))
# 결과 화면
# os.getpid()를 통해 4개의 업무를 2개의 프로세스에서 각각 실행되는 것을 알 수 있음
0 3180
2 16792
1 8288
3 3720
processing time : 1.1711664199829102 seconds
프로세스를 많이 활용할 수록 처리속도가 상당히 줄어든 것을 볼 수 있다.
Python을 활용한 멀티프로세싱 방법은
- Pool을 활용하여 원하는 만큼의 수인 프로세스를 할당한다. (multiprocessing.Pool(processes))
- map 함수를 활용하여 각 프로세스에 처리할 업무를 할당한다. (pool.map(func, iterable))
- 모든 작업이 완료되면 close()를 통해 pool의 프로세스들을 종료하며, join()은 pool의 모든 프로세스가 종료가 완료가 되는 것을 기다린다. (pool.close() , pool.join())
이 3단계를 통해 간단히 구현할 수 있다.
728x90
'Language > Python' 카테고리의 다른 글
cuda(async=True)에서 async가 SyntaxError: invalid syntax 오류 (0) | 2022.04.21 |
---|---|
CMD에서 'tensorboard'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 오류 (0) | 2022.04.19 |
PIL.UnidentifiedImageError: cannot identify image file (0) | 2022.03.02 |
Please use tqdm.notebook.tqdm instead of tqdm.tqdm_notebook (0) | 2022.02.24 |
[Python] for문에서 'int' object is not iterable 오류 (0) | 2022.02.23 |
Comments