[파이썬] aiohttp 클라이언트 요청 타임아웃 설정

소개

aiohttp는 Python에서 비동기 웹 클라이언트 및 서버를 구축하기 위한 라이브러리입니다. 이를 사용하여 다른 서버에 HTTP 요청을 보낼 수 있으며, 응답을 비동기적으로 처리할 수 있습니다. 하지만, 때로는 요청에 대한 응답이 오랜 시간 동안 지연되는 경우가 발생할 수 있습니다. 이런 경우를 처리하기 위해 aiohttp 클라이언트에서 요청 타임아웃을 설정할 수 있습니다.

aiohttp 클라이언트 요청 타임아웃 설정하기

aiohttp 클라이언트의 요청 타임아웃을 설정하는 방법에는 두 가지가 있습니다. 첫 번째 방법은 timeout 매개변수를 사용하여 개별 요청에 대한 타임아웃을 설정하는 것이고, 두 번째 방법은 aiohttp 클라이언트 자체의 타임아웃을 설정하는 것입니다.

개별 요청에 대한 타임아웃 설정

import aiohttp

async def make_request():
    async with aiohttp.ClientSession() as session:
        try:
            async with session.get('https://example.com', timeout=aiohttp.ClientTimeout(total=5)) as response:
                response_text = await response.text()
                print(response_text)
        except aiohttp.ClientTimeoutError:
            print("Request timed out.")

위의 예제에서는 timeout 매개변수를 사용하여 개별 요청에 대한 타임아웃을 설정하고 있습니다. aiohttp.ClientTimeout을 사용하여 타임아웃 값을 설정하고, session.get 메서드에 timeout 매개변수로 전달합니다. 이렇게 설정된 타임아웃은 개별 요청에만 적용됩니다.

aiohttp 클라이언트 전역 타임아웃 설정

import aiohttp

async def make_request():
    timeout = aiohttp.ClientTimeout(total=5)
    async with aiohttp.ClientSession(timeout=timeout) as session:
        try:
            async with session.get('https://example.com') as response:
                response_text = await response.text()
                print(response_text)
        except aiohttp.ClientTimeoutError:
            print("Request timed out.")

위의 예제에서는 aiohttp.ClientTimeout을 사용하여 타임아웃 값을 설정하고, aiohttp.ClientSession을 생성할 때 timeout 매개변수로 전달함으로써 aiohttp 클라이언트의 전역 타임아웃을 설정합니다. 이렇게 설정된 타임아웃은 모든 요청에 적용됩니다.

결론

aiohttp 클라이언트에서 요청 타임아웃을 설정하는 방법에 대해 알아보았습니다. 요청 타임아웃은 응답이 오랜 시간 동안 지연될 때 발생할 수 있는 문제를 처리하기 위해 유용한 기능입니다. 개별 요청에 대한 타임아웃을 설정하거나 aiohttp 클라이언트의 전역 타임아웃을 설정하여 이러한 문제를 방지할 수 있습니다.