본문 바로가기
카테고리 없음

Python에서 'TimeoutError' 오류 처리 방법

by vibespace 2025. 3. 22.

'TimeoutError'란 무엇인가?

TimeoutError는 Python에서 특정 작업이 너무 오랜 시간 동안 완료되지 않아서 발생하는 오류입니다. 주로 네트워크 요청, 파일 작업, 또는 시스템과의 상호작용에서 지정된 시간 내에 작업이 완료되지 않으면 이 오류가 발생합니다. TimeoutError는 코드 실행의 지연을 방지하고, 일정 시간 안에 작업을 완료하지 않으면 오류를 발생시키도록 설정된 타이머와 관련이 있습니다.

'TimeoutError' 발생 원인

TimeoutError는 다양한 이유로 발생할 수 있습니다:

  • 서버 응답 시간 초과: 서버가 요청에 대한 응답을 지정된 시간 안에 반환하지 않으면 이 오류가 발생합니다. 이는 서버가 느리거나 과부하 상태일 때 자주 발생합니다.
  • 네트워크 연결 문제: 네트워크 연결이 불안정하거나, 인터넷 속도가 매우 느려서 요청이 완료되지 않으면 이 오류가 발생할 수 있습니다.
  • 파일 작업 지연: 파일을 읽거나 쓰는 작업에서 시간이 너무 오래 걸리는 경우에도 발생할 수 있습니다. 예를 들어, 매우 큰 파일을 처리할 때 시간이 많이 소요될 수 있습니다.
  • API 요청 시간 초과: 외부 API에 요청을 보냈을 때, API 서버가 응답을 하지 않으면 이 오류가 발생할 수 있습니다.

'TimeoutError' 발생 예시와 해결 방법

이제 TimeoutError가 발생하는 대표적인 예시와 그 해결 방법을 살펴보겠습니다.

1. 서버 응답 시간 초과

서버가 요청을 처리하는데 너무 오래 걸리면 TimeoutError가 발생할 수 있습니다. 서버 응답이 지정된 시간 내에 이루어지지 않으면 오류가 발생합니다.

오류 발생 예시

import requests
response = requests.get('http://example.com', timeout=5)  # TimeoutError: Request timed out

해결 방법

시간 초과를 방지하기 위해 타임아웃 시간을 늘려주거나, 서버 응답 시간이 빠른 다른 서버를 사용해야 할 수 있습니다. 요청에 대해 더 긴 시간 초과를 설정하여 응답을 기다릴 수 있습니다.

import requests
response = requests.get('http://example.com', timeout=10)  # 10초 동안 대기

2. 네트워크 연결 문제

네트워크 연결이 불안정하면 요청이 지연되거나 실패할 수 있습니다. 네트워크 속도가 느려서 요청이 시간이 초과될 수 있습니다.

오류 발생 예시

import requests
response = requests.get('http://example.com', timeout=3)  # TimeoutError: Request timed out

해결 방법

네트워크 환경을 점검하고, 인터넷 속도나 연결 상태가 안정적인지 확인해야 합니다. 또한, 시간 초과를 재조정하여, 요청이 완료되기까지 더 긴 시간을 설정할 수 있습니다.

3. API 요청 시간 초과

외부 API에 요청을 보냈을 때, API 서버가 응답을 하지 않으면 TimeoutError가 발생할 수 있습니다. 특히, 외부 API 서버의 부하가 높거나 응답 시간이 길 경우 발생합니다.

오류 발생 예시

import requests
response = requests.get('https://api.example.com/data', timeout=5)  # TimeoutError: Request timed out

해결 방법

API의 응답 시간을 늘리거나, 재시도 로직을 추가하여 오류가 발생했을 때 다시 시도할 수 있도록 할 수 있습니다. 또한, API 제공업체의 상태 페이지를 확인하여 서버가 정상적으로 작동하는지 확인할 수 있습니다.

import time
import requests

url = "https://api.example.com/data"
for i in range(3):  # 최대 3번 시도
    try:
        response = requests.get(url, timeout=10)
        break  # 성공 시 반복 종료
    except requests.exceptions.Timeout:
        print("시간 초과, 재시도 중...")
        time.sleep(2)  # 2초 대기 후 재시도
else:
    print("API 요청에 실패했습니다.")  # 재시도 후에도 실패 시 메시지

4. 파일 작업 지연

파일을 읽거나 쓸 때 시간이 오래 걸리면 TimeoutError가 발생할 수 있습니다. 특히, 매우 큰 파일을 처리할 때 이 오류가 발생할 수 있습니다.

오류 발생 예시

with open("large_file.txt", "r") as file:
    data = file.read()  # TimeoutError 발생

해결 방법

큰 파일을 다룰 때는 파일을 작은 덩어리로 나누어 처리하는 것이 좋습니다. 예를 들어, 한 번에 모든 파일을 읽지 않고, 일정 크기씩 읽는 방법을 사용할 수 있습니다.

with open("large_file.txt", "r") as file:
    chunk_size = 1024  # 1KB씩 읽기
    while chunk := file.read(chunk_size):
        process(chunk)  # 각 덩어리 처리

'TimeoutError' 예방을 위한 팁

TimeoutError를 예방하려면 다음과 같은 방법을 고려해야 합니다:

  • 타임아웃 시간 설정: 작업에 적절한 시간 초과를 설정하여 무한히 기다리지 않도록 합니다. 너무 짧은 시간은 오류를 발생시킬 수 있으므로, 상황에 맞는 적절한 타임아웃 시간을 설정합니다.
  • 서버 응답 시간 체크: 서버가 느린 경우 응답 시간을 조정하거나, 빠른 서버를 선택하여 작업을 처리할 수 있도록 합니다.
  • 재시도 로직 추가: 네트워크 연결이 불안정할 때 재시도 로직을 추가하여 요청이 실패해도 다시 시도할 수 있도록 합니다.
  • 파일 처리 최적화: 큰 파일을 처리할 때는 작은 덩어리로 나누어 읽거나 쓰는 방법을 사용하여 작업 시간을 단축할 수 있습니다.

결론

TimeoutError는 Python에서 네트워크 요청, 파일 작업 등에서 시간 초과로 인해 발생하는 오류입니다. 이 오류를 해결하려면 타임아웃 시간을 적절히 조정하고, 서버 응답 시간을 늘리거나 네트워크 연결 상태를 점검해야 합니다. 또한, 재시도 로직을 추가하거나 파일 처리 방식을 최적화하여 오류를 예방할 수 있습니다. TimeoutError를 예방하고 해결하는 방법을 숙지하면 안정적이고 효율적인 코드 작성을 할 수 있습니다.