当我从中读取数据时,我需要找到一种顺畅管理服务器停顿的方法。我在下面写了一段代码:
def listener():
resp = requests.get(someurl, stream=True)
if resp.status_code == 200:
for line in resp.iter_lines():
if line:
do_something_with_the_line
print(result)
price_thread = threading.Thread(target=listener, name="StreamingThread", args=[])
trade_thread.start()
代码运行良好,直到服务器停止发生(API提供商建议在10秒内没有收到“行”时发生停顿。)
如何在我的代码中实现这一点?
换句话说,当发生停顿时,我会尝试回忆listener
方法而不退出price_thread
线程。
提前致谢
答案 0 :(得分:0)
您可以使用timeout
属性确保在指定的时间内未收到任何数据后断开连接,然后重新建立连接:
def listener():
while True:
try:
resp = requests.get(someurl, stream=True, timeout=10)
if resp.status_code == 200:
for line in resp.iter_lines():
if line:
# do_something_with_the_line
pass
elif resp.status_code == 429:
print("Too many reconnects, exiting.")
break
else:
print("Unhandled status `{}` retreived, exiting.".format(resp.status_code))
break
except requests.exceptions.Timeout:
pass # we'll ignore timeout errors and reconnect
except requests.exceptions.RequestException as e:
print("Request exception `{}`, exiting".format(e))
break
您也可以添加重新连接计数器,而不是无限期地while True
循环。