반응형
Python에서 API를 수십 번 이상 동시 호출된 결과를 한 번에 모아서
실제로 1~2번 호출에 가까운 시간에 전체 결과를 받을 수 있는 방법에 대하여
간략하게 정리해보도록 하겠습니다.
여기서는 aiohttp 모듈의 비동기 호출을 사용하게 되는데요.
이에 대한 기본적인 내용은 아래 링크의 이전 포스팅을 참고하시면 도움이 됩니다.
비동기 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 예제(파일 및 이미지 첨부 포함) (2) | 2024.03.06 |