JAMONGPROJECT
[DAY20] 병렬 처리 본문
프로세스와 쓰레드
프로세스: 실행 중인 프로그램, 자원과 쓰레드로 구성
쓰레드 : 프로세스 내에서 실제 작업을 수행
파이썬의 쓰레드
파이썬은 인터프리터 언어로서 기본적으로 싱글 쓰레드에서 순차적으로 동작. 따라서 병렬처리를 위해선 별도의 모듈 을 사용하여 수행해야 한다.
멀티 쓰레드
from threading import Thread
def work(work_id, start, end, result):
total = 0
for i in range(start, end):
total += i
result.append(total)
if __name__ == "__main__":
result = []
th1 = Thread(target=work, args=(1, 0, 10000, result))
th2 = Thread(target=work, args=(2, 10001, 20000, result))
th1.start()
th2.start()
th1.join() # join () 메소드는 파이썬에게 프로세스가 종료 될 때까지 대기하도록 지시합니다.
th2.join()
print(sum(result))
멀티 프로세싱(POOL)
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
p = Pool(4)
result= p.map(f,[1,2,3,4])
p.close()
print(result)
멀티 프로세싱(Process)
from multiprocessing import Process
def f(x):
print(x*x)
if __name__ == '__main__':
numbers=[1,2,3,4]
proc1= Process(target=f, args=(numbers[0],))
proc1.start()
proc2= Process(target=f, args=(numbers[1],))
proc2.start()
proc3= Process(target=f, args=(numbers[2],))
proc3.start()
proc4= Process(target=f, args=(numbers[3],))
proc4.start()
proc1.join()
proc2.join()
proc3.join()
proc4.join()
Process vs Pool
Pool과 Process 모두 병렬 처리를 위해 사용되지만 차이가 존재한다. 쉽게 설명하자면, Pool은 처리할 일들
을 pool에 뿌려 놓고 알아서 병렬 처리를 하게 만드는 것이고 Process는 각 프로세스별로 할당량을 명시적으
로 적어 두고 그걸 처리하게 하는 것이다.
• 물론 이는 이해를 돕기 위해 간단하게 설명했을 뿐 실제로 둘의 차이는 조금 더 복잡하다
멀티 쓰레드와 멀티 프로세스
쓰레드는 가볍지만 파이썬의 GIL 정책으로 인해 I/O 처리를 하는 경우에만 주로 효과적이고 프로세스는 각자
가 고유한 메모리 영역을 가지기 때문에 처음 프로세스를 만들 때 시간이 조금 필요하고 더 많은 메모리를 필
요로 하지만 병렬적으로 cpu 작업을 할 수 있어서 빠르다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
#패스트캠퍼스 #패캠챌린지 #수강료0원챌린지 #환급챌린지 #직장인인강 #직장인자기계발
#패캠인강후기 #패스트캠퍼스후기 #오공완
#한번에끝내는컴퓨터공학전공필수&인공지능심화초격차패키지Online
'Challenge > FASTCAMPUS 30일 챌린지' 카테고리의 다른 글
[DAY22] DB연동과 정규식 (0) | 2023.03.13 |
---|---|
[DAY21] DB연동과 정규식 (0) | 2023.03.12 |
[DAY19] 병렬 처리 (0) | 2023.03.10 |
[DAY18] 파일 입출력 (0) | 2023.03.09 |
[DAY17] 파일 입출력 (0) | 2023.03.08 |
Comments