멀티 프로세싱

병렬처리를 처리하는 경우 스레드보다 멀티프로세싱이 효율적 & 권 : GIL(global interpreter lock), 멀티프로세싱 vs 멀티 스레딩

  • mutiprocessing 에서는 대표적으로 Pool 과 Process 를 이용하여 하나 이상의 자식 process를 생성 병렬구조로 처리

1. Pool을 이용한 멀티 프로세싱

  • 동시 수행을 위한 프로세스 풀을 만들어 놓고 사용한다.
import multiprocessing
import time

#시작시간
start_time = time.time()

#멀티쓰레드 사용 하는 경우 (20만 카운트)
#Pool 사용해서 함수 실행을 병렬
def count(name):
    for i in range(1,50001):
        print(name," : ",i)

num_list = ['p1', 'p2', 'p3', 'p4']

if __name__ == '__main__':
    #멀티 쓰레딩 Pool 사용
    pool = multiprocessing.Pool(processes=2) # 현재 시스템에서 사용 할 프로세스 개수
    pool.map(count, num_list)
    pool.close()
    pool.join()

print("--- %s seconds ---" % (time.time() - start_time))


#출처: https://niceman.tistory.com/145 [좋은사람의 개발 노트]

2. Process를 이용한 멀티 프로세싱

  • 할당 받은 가상 코어가 MAX 4개라면, 1개를 여유로 두고, 3개를 자유롭게 쓰겠다.
  • 작업 성격에 따라 검토해야 겠지만, 일반적으로 MAX - 1은 추천되는 방식이다.
from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

results matching ""

    No results matching ""