반응형
Python에서 API를 수십 번 이상 동시 호출된 결과를 한 번에 모아서
실제로 1~2번 호출에 가까운 시간에 전체 결과를 받을 수 있는 방법에 대하여
간략하게 정리해보도록 하겠습니다.
여기서는 aiohttp 모듈의 비동기 호출을 사용하게 되는데요.
이에 대한 기본적인 내용은 아래 링크의 이전 포스팅을 참고하시면 도움이 됩니다.
파이썬 requests 비동기로 요청하기(aiohttp 및 asyncio 활용)
Python에서 requests 모듈로 get, post 등의 요청을 진행하는 경우가 종종 있는데요. 이번 글에서는 이러한 종류의 요청을 aiohttp 모듈을 통하여 async로 처리하는 방법을 간략하게 정리해보도록 하겠습
jimmy-ai.tistory.com
비동기 API 호출 결과 모으기 예제 코드
API 호출의 예시로, 가상의 호출 결과를 제공하는 https://jsonplaceholder.typicode.com/
사이트에서 여러 번 API를 호출한 결과를 한 번에 모아서 받는 코드를 다루어 보겠습니다.
import asyncio
import aiohttp # pip install aiohttp
# 비동기적으로 API를 호출하는 함수(이전 포스팅 참조)
async def fetch(session, url):
async with session.get(url) as response:
return await response.json() # JSON 응답을 반환받는 상황 가정
# 모든 API 호출을 실행하고 결과를 수집하는 함수
async def fetch_all(urls):
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks) # 모든 작업을 동시에 실행
return results
# 비동기 작업을 시작하는 메인 함수
async def main():
# API 호출할 URL 목록 예시(30번의 호출이 필요한 상황 가정)
urls = [f'https://jsonplaceholder.typicode.com/todos/{num}' for num in range(1, 31)]
# API 호출 실행 및 결과 출력
results = await fetch_all(urls)
print(results)
# 비동기 메인 함수 실행
asyncio.run(main())
위의 코드는 실제로는 총 30번의 API 호출이 필요하게 되지만,
동시 호출 및 결과 수집 과정을 단번에 실행하면서
1~30번에 해당하는 json 파일을 순서대로 모은 결과를 거의 1~2번 호출에 걸리는 시간에
받아올 수 있는 코드의 예시입니다.
'Python > Utils' 카테고리의 다른 글
| 파이썬 가상 환경 도구 poetry 특징 및 명령어 정리 (0) | 2024.04.04 |
|---|---|
| 파이썬 코드 포맷터 black 사용하는 이유 / 사용 방법 (0) | 2024.03.13 |
| 파이썬 구글 이메일(Gmail) 보내기 SMTP 예제(파일 및 이미지 첨부 포함) (3) | 2024.03.06 |