我正在尝试使用 requests
模块消费由 Kubernetes API 提供的事件流。我遇到了一个缓冲问题:似乎 requests
模块落后了一个事件。
我的代码大致如下:
r = requests.get('http://localhost:8080/api/v1beta1/watch/services',
stream=True)
for line in r.iter_lines():
print 'LINE:', line
随着Kubernetes发出事件通知,当新事件到来时,此代码仅会显示最后一个发出的事件,这使得它对需要响应服务添加/删除事件的代码几乎完全无用。
我通过在子进程中生成curl
而不是使用requests
库来解决这个问题:
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
这个方法虽然可行,但会牺牲一些灵活性。是否有一种方法可以使用requests
库避免这个缓冲问题呢?