Notice
Recent Posts
Recent Comments
Link
코드로 우주평화
파이썬 코루틴 활용 본문
반응형
웹사이트 데이터 가져오기
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 |