관련글 ▼
[인프런 리프 2기] 10. 파이썬 중급 과정 3주차(4) 일급함수-3,4
[인프런 리프 2기] 11. 파이썬 중급 과정 4주차(1) 병행성
[인프런 리프 2기] 12. 파이썬 중급 과정 4주차(2) 병렬성
드디어 강의의 마지막에 도달했다! 갑자기 이런저런 일이 겹쳐서 오늘에서야 마무리 짓게 되었는데 내가 가장 궁금했던 내용이었으나 아직 뭐가 뭔지 모르겠다...ㅋㅋㅋㅋㅋ
비동기 I/O Coroutine 작업을 쉽게 할 수 있도록 도와주는 모듈이다. Generator가 반복적인 객체를 return을 사용해서 받는다면 asyncIO는 Non-blocking 비동기 처리를 해준다. 참고로 pip install을 통해 설치해야만 사용 가능하다.
장단점
import asyncio
import timeit
from urllib.request import urlopen
from concurrent.futures import ThreadPoolExecutor
import threading
crawling으로 데이터를 수집할때 자동화된 코드를 만들어서 웹페이지에서 데이터를 수집하자. 단일스레드보다 블록IO를 사용하면 정확하고 빠르게 크롤링이 가능하다.
# 실행 시작 시간
start = timeit.default_timer()
# 서비스 방향이 비슷한 사이트로 실습
urls = ['http://daum.net','http://naver.com','http://tistory.com']
if __name__ == '__main__':
# 루프 초기화 : 제어권을 서로 주고 받겠다
loop = asyncio.get_event_loop()
# 작업 완료까지 대기
loop.run_until_complete(main())
# loop를 끝날때까지 돌린다.
# 수행 시간 계산
duration = timeit.default_timer() - start
# 총 실행 시간
print('Total Running Time : ', duration)
async def main():
# 스레드 풀
executor = ThreadPoolExecutor(max_workers=10)
# future 객체를 모아서 gather에서 실행
futures = [
asyncio.ensure_future(fetch(url, executor)) for url in urls
]
# 결과 취합
rst = await asyncio.gather(*futures)
print()
print('Result : ', rst)
async def fetch(url, executor):
# 쓰레드 명 출력
print('Thread Name : ', threading.current_thread().getName(), 'Start', url)
# 실행
res = await loop.run_in_executor(executor, urlopen, url)
print('Thread Name : ', threading.current_thread().getName(), 'Done', url)
# 결과 반환
return res.read()[0:5]
뷰티플수프는 HTML과 XML 파일로부터 데이터를 뽑아내기 위한 파이썬 라이브러리이다. 여러분이 선호하는 해석기와 함께 사용하여 일반적인 방식으로 해석 트리를 항해, 검색, 변경할 수 있다. 주로 프로그래머의 수고를 덜어준다.(출처)
from bs4 import BeautifulSoup
async def fetch(url, executor):
# 쓰레드 명 출력
print('Thread Name : ', threading.current_thread().getName(), 'Start', url)
# 실행
res = await loop.run_in_executor(executor, urlopen, url)
soup = BeautifulSoup(res.read(), 'html.parser')
# 전체 페이지 소스 확인
print(soup.prettify())
# 제목만 가져오기
result_data = soup.title
print('Thread Name : ', threading.current_thread().getName(), 'Done', url)
# 결과 반환
return result_data
< 강의 출처 - 인프런 우리를 위한 프로그래밍 파이썬 중급 (Inflearn Original) >
[인프런 리프 2기] 14. 파이썬 중급 과정 후기 (0) | 2021.04.05 |
---|---|
[인프런 리프 2기] 12. 파이썬 중급 과정 4주차(2) 병렬성 (0) | 2021.03.31 |
[인프런 리프 2기] 11. 파이썬 중급 과정 4주차(1) 병행성 (0) | 2021.03.31 |
[인프런 리프 2기] 10. 파이썬 중급 과정 3주차(4) 일급함수-3,4 (0) | 2021.03.28 |
[인프런 리프 2기] 10. 파이썬 중급 과정 3주차(3) 일급함수-1,2 (0) | 2021.03.27 |
댓글 영역