반응형
반응형
https://marketward.tistory.com/5
[Python/파이썬]네이버증권API 활용 - multiprocessing 사용 (4/4)
https://marketward.tistory.com/4 [Python/파이썬]네이버증권API 활용 - PER, PBR 기준으로 종목 검색(3/4) https://marketward.tistory.com/3 [Python/파이썬]네이버증권API 활용 - 네이버증권API + 종목코드로 json 결과 확인(2
marketward.tistory.com
위와 같이 multiprocessing을 사용할 때, 내 PC가 사용할 수 있는 최대 풀파워(최대 CPU)로 일이 빨리 처리되길 바랄 수 있습니다. 그리하여…
우선, Python의 multiprocessing 모듈에서 cpu_count() 메서드를 사용합니다.
from multiprocessing import cpu_count
print("최대 CPU 개수는 %s 입니다."%cpu_count())
결과 나왔습니다. 제 PC는 12개의 CPU를 사용하고 있는 것으로 보입니다.
앞서 포스팅한 "네이버증권API 활용" 코드에서 multiprocessing 시작 구분을 Pool(cpu_count())와 같이 처리하여 최대 CPU 개수가 입력되도록 했습니다.
import time
from multiprocessing import Pool
from multiprocessing import cpu_count
import pandas as pd
import json
import urllib.request
#한국거래소에서 종목 코드 받아옵니다. [0]은 헤더를 첫번째 행으로 지정하기 위해 사용 했습니다.
code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13')[0]
#종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줍니다.
code_df.종목코드 = code_df.종목코드.map('{:06d}'.format)
#우리에게 필요한 회사명과 종목코드만 남깁니다.
code_df = code_df[['회사명', '종목코드']]
#리스트 형식으로 변경하면 네이버증권API 사용을 위한 준비가 끝납니다.
stock_list = code_df.values.tolist()
#multiprocessing을 위해 함수로 작성합니다.
def func(stock_set):
#회사명을 가져옵니다.
item_name = stock_set[0]
#종목코드를 가져옵니다.
item_code = stock_set[1]
#네이버증권API인 요약 정보 기능을 사용 합니다.
url = "https://api.finance.naver.com/service/itemSummary.nhn?itemcode=%s"%(item_code)
#urllib.request를 통해 링크의 결과를 가져옵니다.
raw_data = urllib.request.urlopen(url).read()
#추후, 데이터 가공을 위해 json 형식으로 변경 합니다.
json_data = json.loads(raw_data)
#PER과 PBR을 변수로 지정합니다.
per_value = json_data['per']
pbr_value = json_data['pbr']
#우선, PER 값이 있는 종목을 골라 냅니다.
if per_value :
#PER이 0보다 크고 2보다 작은 종목이면서 PBR이 0.7보다 작은 종목을 찾습니다.
if 0 < per_value < 2 and 0.7 > pbr_value :
print("[%s]의 per은 %s 입니다. (pbr %s)" %(item_name, per_value, pbr_value))
#func 함수를 stock_list 범위로 병렬 처리 합니다.
if __name__ == '__main__':
start = time.time()
#Pool(cpu_count()) 를 통해 PC의 최대 CPU 개수로 입력됩니다.
with Pool(cpu_count()) as p:
p.map(func, stock_list)
print("\nCPU %s개를 사용 했습니다.\n"%cpu_count() + f"{time.time()-start:.4f} sec")
결과입니다. Pool(6)을 사용할 때보다 빨라진 것 같습니다.
반응형
'Python > 보관' 카테고리의 다른 글
[Python/파이썬] 리스트 안의 리스트(List)를 딕셔너리(dictionary)로 변환 (0) | 2023.04.01 |
---|---|
[Python/파이썬] Python 패키지 - PIP, PyPI (0) | 2022.11.23 |
[Python/파이썬] 비개발자의 Python 세팅 (Windows 사용자) (0) | 2022.11.22 |
[Python/파이썬] 실행 시간 측정 (0) | 2022.11.14 |