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')
'Today_I_Learned' 카테고리의 다른 글
[Django DRF] Serializer에서 id를 사용한 M:N 관계 (0) | 2023.11.13 |
---|---|
AWS API Gateway로 DynamoDB PutItem 메서드 구현 (23.10.13) (1) | 2023.10.14 |
네이버 증권 ETF 시세 정보 및 항목 리스트 API 조회 파이썬 코드 예제 (0) | 2023.09.30 |
장내채권 가격 데이터 조회 파이썬 코드 예제 (0) | 2023.09.29 |
Cloudflare R2 파일 업로드 파이썬 코드 예제 (0) | 2023.09.29 |