#url 이미지를 저장하는 함수 defsave_img(idx, img_url): res = requests.get(img_url).content withopen(f'{idx}.jpg', 'wb') as f: # 이미지 관련 작업은 pillow 모듈을 사용하는게 좋다 # 예제에서는 사용 안함 (따로 설치가 필요) f.write(res) print(f'save {idx}')
with ThreadPoolExecutor(max_workers=10) as executor: for idx, res_data inenumerate(reg_iter): # url 을 뽑아내는 전처리 작업 img_url = res_data.group().split('oimgurl:')[1].split(', cpid')[0].replace('"', '') executor.submit(save_img, idx, img_url)
t2 = time.time() print(t2 - t1)
작업결과
마찬가지로 작업 시간이 1초대로 단축된 걸 확인 할 수 있다
결론
I/O 작업이 있을 때 병렬 처리 작업을 활용하여 작업 시간을 단축시킬수 있다
상황에 따라 다르지만 될 수 있으면 thread 모듈보단 고수준 비동기 concurrent.futures 모듈을 사용하자 병렬처리 작업의 결과물을 리턴 받는 등 다양한 함수를 제공한다 참조링크