现在我正在使用Flask,我在尝试使用python请求模块执行多个GET请求时遇到了麻烦。
如果我尝试发送一系列请求,第一个请求成功完成,但其他请求会抛出超时异常。
以下是视图代码的一部分:
import requests
sess = requests.Session()
site_url = 'http://www.example.com/api/'
steps = ['first_step', 'second_step', 'third_step']
step_responses = dict()
for s in steps:
try:
req = sess.get(site_url + s, timeout=5))
except requests.exceptions.Timeout:
return jsonify({'result':False, 'error':'timeout'})
except requests.exceptions.ConnectionError:
return jsonify({'result':False, 'error':'connection_error'})
else:
step_responses[s] = True
如果我将此部分提取到独立的.py文件中,则会成功完成。
import requests
sess = requests.Session()
site_url = 'http://www.example.com/api/'
steps = ['first_step', 'second_step', 'third_step']
step_responses = dict()
for s in steps:
try:
req = sess.get(site_url + s, timeout=5)
except requests.exceptions.Timeout:
step_responses[s] = 'timeout'
except requests.exceptions.ConnectionError:
step_responses[s] = 'conn_error'
else:
step_responses[s] = 'ok'
print step_responses
答案 0 :(得分:0)
适合我。您可能需要检查第二步和第三步
import requests
sess = requests.Session()
def module():
site_url = 'http://stackoverflow.com/'
steps = ['users', 'questions', 'tags']
step_responses = dict()
for s in steps:
try:
req = sess.get(site_url + s, timeout=5)
except requests.exceptions.Timeout:
return jsonify({'result':False, 'error':'timeout'})
except requests.exceptions.ConnectionError:
return jsonify({'result':False, 'error':'connection_error'})
else:
step_responses[s] = True
答案 1 :(得分:0)
您可能希望确保从req对象中读取所有值。 我想你可能需要req.text和req.status_code或req.content
在这里检查页面的中间位置:http://docs.python-requests.org/en/latest/api/#request-sessions他们在那里讨论会话参数 “class requests.adapters.HTTPAdapter(pool_connections = 10,pool_maxsize = 10,max_retries = 0,pool_block = False)”
我完全不确定如何使用连接池等等,但文档会说(http://docs.python-requests.org/en/latest/user/advanced/)(寻找保持活跃)
“请注意,只有在读取了所有正文数据后,才会将连接释放回池中以供重用;请确保将stream设置为False或读取Response对象的content属性。”