0

现在我正在使用 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
4

2 回答 2

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
于 2015-07-22T13:52:21.153 回答
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/)(寻找保持活动状态)

“请注意,只有在读取所有正文数据后,连接才会释放回池中以供重用;请务必将流设置为 False 或读取响应对象的内容属性。”

于 2015-07-23T03:28:18.540 回答