반응형
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 등에서 응용할 수 있는 부분이 많기 때문에 아래 문서를 참고하면 좋을 것 같다.
반응형
'Python' 카테고리의 다른 글
Python - salt와 nonce에 대해 (0) | 2024.03.10 |
---|---|
Python - SSL warnings 출력 안하는/비활성화 방법 (0) | 2024.03.07 |
Python - AWS S3 Select 와 Atena 차이점, 기본 사용법 (0) | 2024.03.07 |
pymysql error - RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods (0) | 2024.03.07 |
Pandas - 자동 줄 바꿈(Warp Text) 서식 적용, 및 컬럼 크기(Auto-Column length) (0) | 2024.03.07 |