Python을 만진지 고작... 6개월정도 됐는 데... 흑흑...
어떤 json 데이터를 가져오기 위해 여러개의 URL로 요청을 하여 받아오는 구조를 만들어야하는 상황이 발생했다...
처음 간단히 생각했던 건 request.get을 이용하여 받아오려고 코드를 짜기 시작했다...
회사에서 썼던 URL은 쓸 수 없으니까 google, naver, nate 로 대체해서 코드를 보여드립니다.
아주 아주 아주 간단한 코드이다. 예외처리나 DATA 가공 또한 없다. 핵심은 해당 데이터를 가져오는 시간에 있다!!!
|
# -*- coding: utf-8 -*- # |
위 코드를 사용시 DATA와 종료시간이 나온다. DATA를 print를 하다보니 DATA가 많다면, 종료시간이 길어질 수 있다. DATA를 잘 받아오는 지 확인 후 print는 지워주자!

3개의 URL 밖에 요청을 안했는 데, 0.48초나 걸렸다...(네트워크 상황에 따라 시간을 달라질 수 있습니다!!!)
똑같은 URL를 10번을 더 요청해서 시간을 다시 체크해본다!
urls = ['https://www.google.com', 'https://www.naver.com', 'https://www.nate.com'] * 10
이렇게 30번 요청을 하게 되겠죠?!
그래서 걸린 시간이!!! 무려

5초나 걸렸다... 저 같은 경우 60개 이상되는 데이터를 요청해야하고 약 5초안에 끝내야하는 상황인지라 비동기를 사용해야겠다는 생각을 했다!
그리하여! 새롭게 나온 코드!
| async def vts_json(url): async with aiohttp.ClientSession() as client: try: async with client.get(url) as resp: if resp.status == 200: data = await resp.text(encoding='windows-1251') json_data = json.loads(data) return json_data except aiohttp.ClientError: pass urls = ['https://www.google.com', 'https://www.naver.com', 'https://www.nate.com'] async def main(): vts_data = {url: await vts_json('{url}'.format(url=url)) for url in urls} return vts_data |