반응형
웹사이트 데이터 가져오기
1. session을 통해 url에 접속한다
2. request.get을 통해 데이터를 가져온다
3. session을 닫고 걸린 시간을 측정한다
* session을 간편하게 닫기 위해 with문을 사용했다. with문을 사용하면 with 블록을 벗어나는 순간 자동으로 close되어 편리하다.
4. 일반 코드와 코루틴 코드의 결과를 비교해본다
일반 코드의 경우(동기)
>>>
15.04025387763977 초
'''
동기로 코드를 작성할 경우
15.04025387763977 초 소요
'''
import requests
import time
def fetcher(session, url):
with session.get(url) as response:
return response.text
def main():
urls = ["https://naver.com", "https://google.com", "https://daum.net"] * 10
with requests.Session() as session:
result = [fetcher(session, url) for url in urls]
print(result)
if __name__ == "__main__":
start = time.time()
main()
end = time.time()
print(end - start)
코루틴 코드의 경우(비동기)
>>>
1.7667789459228516 초 소요
'''
코루틴을 활용하여 비동기로 코드를 작성할 경우(약 10배 더 빠른 처리속도를 보여준다)
1.7667789459228516 초 소요
'''
import asyncio
import aiohttp # aiohttp~=3.7.3 버전 사용
# async 로 코루틴 함수를 만든다.
async def fetcher(session, url):
# with 앞에 async가 붙는 이유는 await을 쓸려면
# 해당하는 context(영역)에 async 가 붙어야 하기 때문에 붙는 것
async with session.get(url) as response:
return await response.text()
async def main():
urls = ["https://naver.com", "https://google.com", "https://daum.net"] * 10
async with aiohttp.ClientSession() as session:
result = await asyncio.gather(*[fetcher(session, url) for url in urls])
print(result)
if __name__ == "__main__":
start = time.time()
asyncio.run(main()) # 코루틴은 asyncio.run()으로 실행
end = time.time()
print(end - start)
이렇듯 코루틴 코드를 활용하면 훨씬 더 빠른 결과값을 받아볼 수 있다.
레퍼런스
반응형
'나는 이렇게 학습한다 > Language' 카테고리의 다른 글
파이썬 멀티 프로세싱, GIL (0) | 2022.01.24 |
---|---|
파이썬 멀티 스레딩 (0) | 2022.01.16 |
파이썬 코루틴 (0) | 2022.01.15 |
파이썬 중간시험 5문제 후기 (0) | 2021.11.14 |
파이썬에서 직접 만든 패키지를 불러오자. (feat. 절대 경로와 상대 경로) (0) | 2021.11.06 |