J.BF Story
[Python] Python Protocol Package Timeout (requests / urllib / ftplib / paramiko) 본문
BackEnd/Python
[Python] Python Protocol Package Timeout (requests / urllib / ftplib / paramiko)
J.BF 2022. 6. 9. 23:42Timeout
- 클라이언트에서 서버로 request를 보낸 후 일정 시간이 지나도 response가 오지 않을 때 더 기다리지 않고 중단하는 것.
- timeout을 설정하지 않으면 무한대로 response를 기다릴 수도 있다.
- ex) timeout을 30초로 설정했을 경우
-> 클라이언트에서 request를 보냈으나 서버에서 30초 이상 response가 오지 않으면 기다림 중단
Protocol Package
HTTP: requests, urllib
FTP: ftplib
SFTP: paramiko
Timeout 기본값
requests | urllib | ftplib | paramiko |
제한 없음 - 공식 문서 |
socket._GLOBAL_DEFAULT_TIMEOUT 사용 - 공식 문서 |
socket._GLOBAL_DEFAULT_TIMEOUT 사용 - 공식 문서 |
None (제한 없음?) - 공식 문서 |
** socket._GLOBAL_DEFAULT_TIMEOUT 값 알아내기: getdefaulttimeout() 사용
import socket
print(socket.getdefaulttimeout())
- float 또는 None을 반환
- float: 초 단위 timeout / None: 제한 없음
- 공식문서
Timeout 사용법
requests
import requests
requests.get(url, timeout=30)
urllib
import urllib.request as urllib
fp = urllib.urlopen(url, timeout=30)
ftplib
from ftplib import FTP
ftp = FTP(timeout=30)
ftp.connect(host, port)
ftp.login(user=id, passwd=pw)
paramiko
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, port=port, username=id, password=pw, timeout=30)
sftp = ssh.open_sftp()
결론
- 대부분의 Python Protocol Package는 timeout을 설정해주지 않으면 기본적으로 제한 없음으로 동작한다.
- timeout을 설정하지 않아서 프로그램이 동작은 되고있으나 다음 작업으로 넘어가지 못한 채 멈춰버린 경우가 있었다.
(timeout이 원인인지 몰랐을 때에는 로그를 남겨도 문제를 찾기 어려웠다..) - Python Protocol Package를 사용할 때 timeout을 명확히 설정해주자.
'BackEnd > Python' 카테고리의 다른 글
[Python] 비교 연산자 'is' vs '==' (0) | 2022.08.05 |
---|---|
[Python] bytes 타입 16진수(hex)로 출력 (0) | 2022.06.29 |
[Python] APScheduler 스케쥴링 라이브러리 (0) | 2022.06.17 |
Comments