Parallelism은 동시성을 뜻한다. Concurrent와 다르게 Multiple Core 환경에서 사용 가능하며 멀티 프로세스의 기본이다.
완전히 동일한 타이밍에 태스크를 실행하여 다양한 파트로 나눠서 실행한다. 예를 들어 딥러닝을 위한 데이터 전처리에서 T1은 크롤링을 하고 T2는 엑셀에서 데이터를 수집하고 T3에서는 데이터베이스에서 데이터를 가져와 정제하여 마지막에 합칠 수 있다.
그림을 봐서 알겠지만 기본적으로 CPU가 1Core인 경우 만족하지 않으며 잘못 사용하면 오히려 성능이 떨어질 수 있다. 주로 CPU 사용량이 많은 딥러닝이나 블록체인 체굴등에 사용된다.
구분 | Process | Thread |
---|---|---|
메모리 독립성 | 독립된 메모리 | 공유 메모리 |
메모리 소모량 | 많은 메모리 소모 | 적은 메모리 소모 |
좀비 객체 | 좀비 프로세스 생성 가능성 높음 | 좀비 스레드 생성 가능성 낮음 |
오버헤드 | 큼 | 작음 |
생명 라이클 | 생성/소멸 느림 | 생성/소멸 빠름 |
구현 난이도 | 코드 쉬움, 디버깅 어려움 | 코드 어려움, 디버깅 어려움 |
from multiprocessing import Process
import time
import logging
# 프로세스 실행 함수
def proc_func(name):
print("Sub-Process {}: starting".format(name))
time.sleep(3)
print("Sub-Process {}: finishing".format(name))
def main():
# Logging format 설정
format = "%(asctime)s: %(message)s"
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
# 함수 인자 확인
p = Process(target=proc_func, args=('First',))
logging.info("Main-Process : before creating Process")
# 프로세스 시작
p.start()
logging.info("Main-Process : During Process")
# logging.info("Main-Process : Terminated Process")
# p.terminate()
logging.info("Main-Process : Joined Process")
p.join()
# 프로세스 상태 확인
print(f'Process p is alive: {p.is_alive()}')
# 메인 시작
if __name__ == '__main__':
main()