-
Python: MPIRE 파이썬 멀티 프로세싱 라이브러리컴퓨터/파이썬 2022. 1. 16. 19:33728x90반응형
MPIRE
소개
GIL 때문에 멀티 스레딩이 다른 언어와 같이 작동을 안 하는 파이썬
기본 탑재된 multiprocessing.Pool이나 concurrent.futures.ProcessPoolExecutor와 같은 클래스들을 이용하여
멀티 프로세싱/스레딩을 사용할 수 있는 데 사용하기 어려울 수 있다.
MPIRE (MultiProcessing Is Really Easy, 멀티프로세싱 정말 쉬움) 라이브러리를 이용하여 쉽게 구현할 수 있다.
이 라이브러리는 멀티프로세싱 기본 라이브러리 기반이라 문법이 거의 같다.
특징
- 다른 멀티프로세싱 라이브러리보다 좀 더 빠름
- Pythonic 문법
- user-friendly 예외 핸들링
- COW 공유 오브젝트 쉬운 사용
- tqdm을 이용해 프로그래스 바 지원
- 대시보드 지원
- 등등...
사용 예제
from mpire import WorkerPool from bigO import BigO lib = BigO() def time_consuming_function(x): arr = lib.genRandomArray(100) print(f"sum: {sum(arr)}") if __name__ == "__main__": # Windows에서 필수 with WorkerPool(n_jobs=5) as pool: results = pool.map(time_consuming_function, range(10)) """ 결과 랜덤 배열을 매번 생성해서 합을 출력 sum: -107 sum: -1012 sum: 976 sum: 974 sum: -1509 sum: -294 sum: -831 sum: -403 sum: -924 sum: -57 """
JobLib, Ray과 비교
from concurrent.futures import ProcessPoolExecutor from multiprocessing import Pool import ray from dask.distributed import Client from joblib import Parallel, delayed from mpire import WorkerPool # Serial processing results = [time_consuming_function(x) for x in data] # Multiprocessing with Pool(processes=5) as pool: results = pool.map(time_consuming_function, data) # ProcessPoolExecutor with ProcessPoolExecutor(max_workers=5) as pool: results = list(pool.map(time_consuming_function, data)) # Joblib results = Parallel(n_jobs=5)(delayed(time_consuming_function)(x) for x in data) # Dask client = Client(n_workers=5) results = client.gather([client.submit(time_consuming_function, x) for x in data]) client.close() # Ray ray.init(num_cpus=5) remote_function = ray.remote(time_consuming_function) results = ray.get([remote_function.remote(x) for x in data]) # MPIRE with WorkerPool(n_jobs=5) as pool: results = pool.map(time_consuming_function, data)
참고
좀 더 많은 예제와 자세한 사항은 Github 참고
728x90'컴퓨터 > 파이썬' 카테고리의 다른 글
Python: 일정 시간마다 subprocess 실행 중인지 체크하기 (0) 2022.07.13 Python: Mito 파이썬 데이터 분석 라이브러리 (0) 2022.01.15 Python: 사진 to pdf 파일 변환 (0) 2021.10.23