requests
모듈을 사용하여 Kubernetes api에서 제공되는 이벤트 스트림을 사용하려고합니다. 나는 버퍼링 문제처럼 보였습니다 : requests
모듈은 하나의 이벤트에 의해 지연되는 것처럼 보입니다.Python "requests"라이브러리로 HTTP 응답 스트리밍 읽기
나는 이런 식으로 뭔가 보이는 코드를 가지고는 Kubernetes 이벤트 알림을 방출로
이r = requests.get('http://localhost:8080/api/v1beta1/watch/services',
stream=True)
for line in r.iter_lines():
print 'LINE:', line
,이 코드 만 표시됩니다 이 거의 쓸모가 만드는 새로운 이벤트가 들어올 때 방출되는 마지막 이벤트, 이벤트 추가/삭제에 응답해야하는 코드의 경우
p = subprocess.Popen(['curl', '-sfN',
'http://localhost:8080/api/watch/services'],
stdout=subprocess.PIPE,
bufsize=1)
for line in iter(p.stdout.readline, b''):
print 'LINE:', line
이 작동하지만, 유연성의 비용 :
나는 서브 프로세스에 curl
을 산란 대신 requests
라이브러리를 사용하여이 문제를 해결했다. requests
라이브러리의 버퍼링 문제를 피할 수있는 방법이 있습니까?
어떤 구현이 올바른지 논증 할 수 있습니다. 데이터가 더 많아지면 가짜 "논리적 줄 바꿈"을 삽입합니다. 올바른 접근법은 데이터의 전체 크기 (하나는 TCP 통신에 대한 요구 사항 임)를 찾아내는 것으로 알려진 끝에 부분 읽기만 사용하는 것입니다. –
기존 구현이 정확하다고 주장 할 수 있다고 생각하지 않습니다. 내 테스트는 엄격한 테스트를 거치지 않았지만 확실히 개선되었습니다. 이상적인 업스트림 패치로 제출 된보다 정확한 구현은 매우 유용합니다. – larsks
@ivan_pozdeev * "올바른 방법은 데이터의 전체 크기 (TCP 통신에 대한 요구 사항을 지정)를 찾는 것입니다."* - 아니요, TCP는 * 스트림 *이며 무한 길이를 가질 수 있습니다. 나는 당신이 그 말을 들었는지 모르지만 근본적으로 사실이 아닙니다. –