Python/Utils

파이썬 API 호출 동시에 여러 번 수행 방법(aiohttp 비동기 호출 응용)

jimmy_AI 2024. 3. 19. 00:13
반응형

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번 호출에 걸리는 시간

받아올 수 있는 코드의 예시입니다.