[파이썬] requests 성능 최적화 팁

Python의 requests 모듈은 HTTP 요청을 보내고 받기 위해 널리 사용되는 강력한 도구입니다. 그러나 대량의 요청을 처리하거나 빠른 응답 시간이 필요한 경우 성능 최적화가 필요할 수 있습니다. 이 블로그 포스트에서는 requests 모듈을 사용하여 성능을 최적화하는 몇 가지 팁을 제공하겠습니다.

1. Keep-Alive 사용하기

기본적으로 requests는 HTTP 요청 후에 커넥션을 닫습니다. 그러나 keep-alive 헤더를 사용하여 커넥션을 유지할 수 있습니다. 이렇게 하면 커넥션을 재사용하여 여러 요청을 보다 효율적으로 처리할 수 있습니다.

import requests

session = requests.Session()
session.get('http://example.com', headers={'Connection':'keep-alive'})

2. 세션 재사용하기

requests 세션을 통해 커넥션을 재사용하는 것은 효율적인 HTTP 요청 처리를 위해 중요합니다. 세션 객체를 사용하여 여러 요청을 보내는 경우 커넥션을 매번 새로 연결하는 대신 세션을 유지할 수 있습니다.

import requests

session = requests.Session()
session.get('http://example.com')
session.get('http://example.com/another-url')

3. 병렬 요청 보내기

requests 모듈의 기본 동작은 요청을 순차적으로 보내는 것입니다. 그러나 concurrent.futures 모듈과 함께 사용하여 요청을 병렬로 보낼 수 있습니다. 이를 통해 다수의 요청을 동시에 처리하여 응답 시간을 단축시킬 수 있습니다.

import requests
import concurrent.futures

urls = ['http://example.com', 'http://example.com/another-url']

def fetch(url):
    response = requests.get(url)
    return response.text

with concurrent.futures.ThreadPoolExecutor() as executor:
    results = executor.map(fetch, urls)

4. 타임아웃 설정하기

네트워크 요청은 종종 예기치 않게 시간이 오래 걸릴 수 있습니다. 이러한 상황에서 프로그램이 무한정 대기하는 것을 방지하고자 타임아웃 값을 설정하는 것이 중요합니다. requests 모듈은 타임아웃 값을 설정하는 옵션을 제공합니다.

import requests

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

5. 압축 사용하기

웹 서버는 응답을 압축하여 데이터 전송 속도를 향상시킬 수 있습니다. requests 모듈은 압축을 지원하며, 압축된 응답을 자동으로 해제하여 사용할 수 있습니다.

import requests

response = requests.get('http://example.com', headers={'Accept-Encoding':'gzip, deflate'})

이러한 팁을 사용하여 requests 모듈을 효율적으로 활용하고 성능을 최적화할 수 있습니다. 성능이 중요한 웹 스크래핑 작업이나 대량의 요청을 처리하는 경우 이러한 최적화 기법을 적용해 보는 것을 추천합니다. Happy coding!