[python] aiohttp를 사용하여 동시에 여러 개의 HTTP 요청에 대한 타임아웃 설정하기

aiohttp는 파이썬을 위한 비동기 HTTP 클라이언트 및 서버 라이브러리입니다. 이 라이브러리를 사용하면 여러 개의 HTTP 요청을 동시에 처리할 수 있습니다. 이번 포스트에서는 aiohttp를 사용하여 여러 개의 HTTP 요청에 대한 타임아웃을 설정하는 방법에 대해 알아보겠습니다.

1. aiohttp 설치하기

먼저, aiohttp를 설치해야 합니다. 아래의 명령어를 사용하여 설치할 수 있습니다.

pip install aiohttp

2. 타임아웃 설정하기

aiohttp에서는 ClientTimeout 클래스를 사용하여 타임아웃을 설정할 수 있습니다. 이 클래스의 인스턴스를 생성한 후, timeout 매개변수를 사용하여 요청에 대한 타임아웃을 설정합니다.

import aiohttp

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    timeout = aiohttp.ClientTimeout(total=10)  # 타임아웃 설정 (10초)
    
    async with aiohttp.ClientSession(timeout=timeout) as session:
        coroutines = [fetch(session, 'http://url1.com'),
                      fetch(session, 'http://url2.com'),
                      fetch(session, 'http://url3.com')]
                      
        responses = await asyncio.gather(*coroutines)
        
        for response in responses:
            print(response)

asyncio.run(main())

위의 예제에서는 ClientTimeout 클래스를 사용하여 10초로 설정된 타임아웃을 생성했습니다. 이 타임아웃을 ClientSessiontimeout 매개변수로 전달하여 세션의 타임아웃을 설정합니다.

그런 다음 fetch 함수를 사용하여 여러 개의 URL에 대한 GET 요청을 만듭니다. 이후 asyncio.gather 함수를 사용하여 모든 요청을 동시에 실행하고, 결과를 responses 리스트에 저장합니다. 이후, 각 응답을 출력합니다.

결론

이제 aiohttp를 사용하여 동시에 여러 개의 HTTP 요청에 대한 타임아웃을 설정하는 방법에 대해 알아보았습니다. aiohttp를 사용하면 비동기적으로 HTTP 요청을 처리할 수 있으며, 타임아웃 설정을 통해 요청에 대한 제한 시간을 설정할 수 있습니다.

참고: aiohttp 공식 문서