gpt4 book ai didi

Python请求包: lost connection while streaming

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:25 25 4
gpt4 key购买 nike

我想使用 Requests 包连接到 Web 服务的流 API。假设我使用以下代码发送请求、接收响应并在响应行到达时对其进行迭代:

import requests

r = requests.get('http://httpbin.org/stream/20', stream=True)
for line in r.iter_lines():
if line:
print line

在等待接收新数据的过程中,我们基本上是在等待 r.iter_lines() 生成新的数据。但如果我在等待期间失去互联网连接怎么办?我怎样才能找到并尝试重新连接?

最佳答案

您可以断开网络来尝试。请求引发这样的错误:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='httpbin.org', port=80): Max retries exceeded with url: /stream/20 (Caused by : [Errno -3] Temporary failure in name resolution)

错误消息显示请求已因网络错误而重试。可以引用这个answer用于设置 max_retries。如果您想要更多自定义(例如,在重试之间等待),请循环执行:

import socket
import requests
import time

MAX_RETRIES = 2
WAIT_SECONDS = 5

for i in range(MAX_RETRIES):
try:
r = requests.get('http://releases.ubuntu.com/14.04.1/ubuntu-14.04.1-desktop-amd64.iso',
stream=True, timeout=10)
idx = 1
for chunk in r.iter_content(chunk_size=1024):
if chunk:
print 'Chunk %d received' % idx
idx += 1
break
except requests.exceptions.ConnectionError:
print 'build http connection failed'
except socket.timeout:
print 'download failed'
time.sleep(WAIT_SECONDS)
else:
print 'all tries failed'

编辑:我用一个大文件进行了测试。我使用 iter_content 代替,因为它是一个二进制文件。 iter_lines 基于 iter_content ( source codes ),所以我相信行为是相同的。步骤:在网络连接的情况下运行代码。收到一些 block 后,断开连接。等待2-3秒,重新连接,继续下载。因此请求包会重试迭代中丢失的连接。

注意:如果在建立连接(requests.get())时没有网络,则会引发 ConnectionError ;如果在 iter_lines/iter_content 中网络丢失,则会引发 socket.timeout。

关于Python请求包: lost connection while streaming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25860105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com