Today_I_Learned

multiprocessing를 통한 병렬 처리 파이썬 코드 예제

CONCAT 2023. 9. 30. 21:18
728x90

  • 데이터 처리에서 2~3배 정도 성능 향상을 목표로 사용할 수 있는 테크닉.
  • 데이터 저장 시 multiprocessing.Queue를 꼭 사용해야함 (공식 문서 참고)
# !pip install finance-datareader -q
from multiprocessing import Pool, Queue, cpu_count
import FinanceDataReader as fdr
import time

# 테스트에 쓸 데이터 목록
top50 = fdr.StockListing('ETF/KR').Symbol.head(50)

# 일반 처리
start_time = time.time()
[fdr.DataReader(symbol) for symbol in top50]
print(f'NORMAL : {(time.time() - start_time)} seconds') # 약 60초

# 병렬 처리
q = Queue() # 병렬 처리 시 multiprocessing.Queue 자료구조를 써야 저장이 보장됨
# 리스트로 직접 변환이 안되므로, 향후 iteration 처리가 필요
def get_data(symbol):
    q.put(fdr.DataReader(symbol))
start_time = time.time()
with Pool(cpu_count() * 2) as p:
    # 일반적으로 병렬 Pool의 갯수는 사용할 수 있는 CPU * 2 정도
    p.map(get_data, top50)
# 약 20초 (Colab, CPU 2개, Pool 4개)
print(f'MULTI : {(time.time() - start_time)} seconds')