본문 바로가기
Python

Python - HTTP Keep-alive 를 통한 성능 향상

by 올엠 2024. 3. 7.
반응형

HTTP Keep-Alive를 이용하면, TCP 세션을 연결하는 작업을 하지 않고 추가적인 데이터를 보낼 수 있기 때문에 많은 장점을 가지게 된다.

Nginx에서도 Keep-alive를 활성화 할 경우 50%이상의 성능을 더 올릴 수 있기 때문에 만약 웹 요청을 진행해야 하는 경우 Keep-alive 사용 가능 유무를 추후 꼭 체크하는 것이 좋다. 

파이썬을 통한 일반적인 요청은 아래와 같다.

import requests
import time
import logging



logging.basicConfig(level=logging.DEBUG)


url = "https://httpbin.org"
start = time.perf_counter()
requests.get(url)
requests.get(url)
requests.get(url)
requests.get(url)
requests.get(url)
end = time.perf_counter()- start
print(end)

위코드의 실행 결과를 보면, 매요청이 새로운 커넥션을 만들고 5번의 쿼리를 하는데 4.3초가량의 시간이 소모된것을 알 수 있다.


세션을 계속 유지하는 Keep-alive는 Python에서는 request.Session을 통해 간단히 사용할 수 있다. 아래와 같이 코드를 변경해서 실행해보자.

import time
import requests
import logging


logging.basicConfig(level=logging.DEBUG)



url = "https://httpbin.org"

start = time.perf_counter()
s = requests.Session()
s.get(url)
s.get(url)
s.get(url)
s.get(url)
s.get(url)
end = time.perf_counter()- start
print(end)

실행 내용을 살펴보면, 최초 1회에만 세션을 만들어 사용하여, HTTP상 요청만 반복하게 된다.

 

결과 1.7초 50%이상 시간이 개선된 것을 알 수 있다.

이외에도 파일 전송 및 Stream 등에서 응용할 수 있는 부분이 많기 때문에 아래 문서를 참고하면 좋을 것 같다.



반응형