[파이썬] requests 타임아웃 설정하기

Python에서 HTTP 요청을 보내는 데 사용되는 requests 모듈은 매우 강력하고 사용하기 쉬운 기능을 제공합니다. 그 중에 하나는 타임아웃 설정입니다. 타임아웃은 서버로의 요청에 대한 응답을 기다리는 최대 시간을 의미합니다.

기본적으로 requests는 요청에 대한 응답을 무한정 기다리지만, 네트워크 문제나 서버 응답 지연으로 인해 요청이 영원히 블로킹될 수 있습니다. 이를 방지하기 위해 타임아웃을 설정하여 최대 응답 시간을 제한할 수 있습니다.

기본 타임아웃 설정

requests에서 타임아웃을 설정하는 가장 간단한 방법은 timeout 매개변수를 사용하는 것입니다. 이 매개변수는 get() 또는 post()와 같은 메서드로 보내는 HTTP 요청에 대해 최대 응답 시간을 지정합니다.

import requests

response = requests.get('http://example.com', timeout=5)

위의 예제에서 timeout=5는 최대 5초 동안 응답을 기다리라는 의미입니다. 즉, 서버로부터의 응답이 5초 이내에 도착하지 않으면 TimeoutError 예외가 발생합니다.

연결 타임아웃과 읽기 타임아웃 설정

requests로 요청을 보낼 때 최대 응답 시간을 세분화하여 설정할 수도 있습니다. 이를 위해서는 timeout 매개변수에 튜플 형태로 값을 지정하면 됩니다. 첫 번째 요소는 연결 타임아웃이고, 두 번째 요소는 읽기 타임아웃입니다.

import requests

response = requests.get('http://example.com', timeout=(3, 5))

위의 예제에서는 최대 3초의 연결 타임아웃과 최대 5초의 읽기 타임아웃을 설정했습니다. 연결 타임아웃은 서버와의 연결을 설정하는데 최대 시간을 의미하며, 읽기 타임아웃은 데이터를 받아오는데 최대 시간을 의미합니다.

타임아웃 처리 예외

HTTP 요청 시 타임아웃이 발생하면 Timeout 예외가 발생합니다. 따라서 requests를 사용할 때 적절한 예외 처리를 수행해야 합니다.

import requests

try:
    response = requests.get('http://example.com', timeout=5)
    response.raise_for_status()
except requests.exceptions.Timeout:
    # 타임아웃 처리
    print("요청이 타임아웃되었습니다.")
except requests.exceptions.RequestException as e:
    # 기타 예외 처리
    print(f"오류 발생: {e}")

위의 예제에서는 Timeout 예외가 발생할 경우 “요청이 타임아웃되었습니다.”라는 메시지를 출력하고, 기타 예외가 발생한 경우 해당 오류 메시지를 출력합니다.

타임아웃 설정은 네트워크 환경에 따라 다르게 설정되어야 합니다. 올바른 타임아웃 설정은 빠른 응답 처리와 프로그램의 안정성을 보장하는 데 큰 도움이 될 것입니다.