import multiprocessing
import time
import os
core_cnt = os.cpu_count()
start_time = time.time()
def count(name):
for i in range(1, 50001):
print(name, " : ", i)
num_list = ['p1', 'p2', 'p3', 'p4']
if __name__ == '__main__':
# pool = multiprocessing.Pool(processes=core_cnt)
# pool.map(count, num_list)
# pool.close()
# pool.join()
with multiprocessing.Pool(core_cnt) as p:
p.map(count, num_list)
print("--- %s seconds ---" % (time.time() - start_time))
# --- 0.8151099681854248 seconds ---
import time
start_time = time.time()
def count(name):
for i in range(1, 50001):
print(name, " : ", i)
num_list = ['p1', 'p2', 'p3', 'p4']
for num in num_list:
count(num)
print("--- %s seconds ---" % (time.time() - start_time))
# --- 0.8629150390625 seconds ---
multiprocessing O | multiprocessing X |
---|---|
0.8151099681854248 seconds | 0.8629150390625 seconds |
#1번째 방법 if __name__ == '__main__': pool = multiprocessing.Pool(processes='사용할 프로세스 개수') pool.map(함수, iterable) pool.close() pool.join()
# 2번째 방법 if __name__ == '__main__': with multiprocessing.Pool('사용할 프로세스 개수') as p: p.map(함수, iterable)
*if name == 'main': 안에서 실행해야 함.
pool 객체 생성
multiprocessing.Pool(processes='사용할 프로세스 개수'
실행할 함수에 iterable 전달
(iterable의 요소들이 함수에 들어감)
*iterable : 반복 가능한 객체(list, dict, set, str, bytes, tuple, range 등)
pool.map(함수, iterable)
리소스 낭비를 방지하기 위해 close 호출
pool.close()
작업 완료 대기 위해 join 호출
pool.join()
현재 로컬 머신의 CPU 수 구하기
core_cnt = os.cpu_count()