일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 모델
- AI
- 지정헌혈
- 자연어처리
- 데이터분석
- pytorch
- 선형회귀
- Regression
- map
- 크롤링
- 선형대수학
- 인공지능
- 파이썬
- 머신러닝
- 회귀
- 유데미
- filtering
- 42경산
- 42서울
- Computer Vision
- 딥러닝
- RNN
- 크롤러
- CV
- mnist
- 코딩애플
- 플러터
- 앱개발
- 피플
- Flutter
Archives
- Today
- Total
David의 개발 이야기!
멀티프로세싱, 멀티스레드 개념을 대략 이해하고 크롤러에 적용하기 본문
반응형
백만개의 데이터를 수집한다고 가정해보자
url 하나 수집하는데, 0.1초가 걸린다고 하면, 대략적으로 10만초, 27시간이 걸린다.
해결책은, 멀티프로세싱 또는 멀티스레드를 사용하면된다.
파이썬 실행창 프로세스를 여러개 띄우는 멀티프로세스를 쓰거나,
PC에 내장된 CPU 를 스레드 여러개로 작업을 나눠서 시키면 된다.
해당 예제에서는, mulitprocessing.Pool.map 이라는 함수를 사용해서 구현했다.
1. 기본 내장 라이브러리 불러오기 ( 멀티스레딩 하는 코드임. 멀티프로세스를 원한다면, .dummy를 제거하면 됌)
2. ThreadPool() 에다가 몇개의 프로세스/스레드 로 동시에 작업을 시킬지 숫자로 적음
3. map(적용시킬 함수, 리스트)
4. close(), join() 을 차례로 해주면 됌 (작업을 그만하고, 작업한 것을 가져오라는 의미임)
import requests
import json
import time
url = [
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1609524000000",
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1608811200000",
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1608098400000",
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1606672800000",
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1605960000000",
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1605242700000",
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1604534400000",
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1603821600000",
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1603108800000",
"https://tb.coinone.co.kr/api/v1/chart/olhc/?site=coinoneeth&type=1h&last_time=1602396000000",
]
def func1(a):
data = requests.get(a)
dict1 = json.loads(data.content)
return dict1['data'][0]['Close']
#멀티프로세스싱
#리스트내 모든 자료에 똑같은 작업을 시켜주고 싶을때 -> map 함수 map(리스트에 적용할 함수, 리스트)
#실전에선, 수집필요한 모든 url 을 리스트에 담아둔 다음, 크롤러함수와 함께 map 에 집어 넣게 됌
from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4) # 몇개를 동시에 처리한다
result = pool.map(func1, url) # 하나하나의 url 이 함수에 들어갔다 나옴
pool.close()
pool.join()
print(result)
* map 함수 사용법
map(리스트 각각의 원소에 적용시킬 함수, 리스트)
따라서, 실전에서는,
수집에 필요한 모든 url 을 리스트 [] 에 담고,
url 을 입력하면 수집결과를 뱉어주는 크롤러함수를 만든다음,
동시에 멀티스레딩 map 함수에 집어 넣으면 된다!!
반응형
'크롤링 공부' 카테고리의 다른 글
인스타그램 이미지 크롤링 프로그램 만들기! (1) | 2023.06.12 |
---|---|
시간과 관련된 함수 알아보기 - datetime, localtime, ctime, time (0) | 2023.06.11 |
웹 크롤러 이해하기[3] - 코인원 사이트 분석 및 JSON 파일 이해하기 (0) | 2023.06.11 |
웹 크롤러 이해하기[2] - 무한 스크롤 해결하기! (0) | 2023.05.02 |
웹 크롤러 개념 익히기[1] - 네이버 주식 현재가 크롤링 예제 (0) | 2023.05.02 |
Comments