除非指定了超时,否则Flask或Requests正在挂起,并且挂起直到指定的超时

时间:2019-07-10 22:16:31

标签: python python-requests python-3.6

我在新计算机上,遇到一个奇怪的问题:

使用没有requests参数的timeout会永远挂起。

使用timeout参数会导致请求挂起,直到timeout中的值通过为止;例如,如果timeout设置为2,则请求挂起两秒钟;如果timeout设置为10;该请求将挂起10秒钟。

使用Firefox或Postman等不会导致此行为。

我在使用请求2.19.1的Python 3.6.5。

烧瓶代码:

import flask

app = flask.Flask(__name__)

@app.route('/')
def home():
     return 'hello'

app.run(host='localhost', port=8080, debug=True)

呼叫代码:

import requests

# This is instant
requests.get('http://localhost:8080/', timeout=0.1)

# This hangs for 2 seconds
requests.get('http://localhost:8080/', timeout=2)

# This hangs for 10 seconds
requests.get('http://localhost:8080/', timeout=10)

# This hangs forever without a `timeout` param
requests.get('http://localhost:8080')

使用Firefox或Postman会立即产生响应,因此我认为这与requests有关。

在旧计算机上,我无法使用相同版本的Python和请求复制此行为。

顺便说一句,大约一个月前,当我第一次加载这台新计算机时,我没有遇到任何问题。

1 个答案:

答案 0 :(得分:0)

大约三个小时的调试后,我重新启动计算机,问题消失了。我不知道根本原因。