请求无法在同一Flask应用中调用多个路由

8 投票
1 回答
3603 浏览
提问于 2025-04-18 08:28

我在用Python的Requests库调用同一个应用里的第二个路由时遇到了问题,使用的是Flask框架。我知道直接调用函数是最好的做法,但我需要通过URL来调用,使用requests库。比如说:

from flask import Flask
import requests
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"  # This works

@app.route("/myrequest")
def myrequest():
    #r = requests.get('http://www.stackoverflow.com', timeout=5).text  # This works, but is external
    #r = hello()  # This works, but need requests to work
    r = requests.get('http://127.0.0.1:5000/', timeout=5).text  # This does NOT work - requests.exceptions.Timeout
    return r

if __name__ == "__main__":
    app.run(debug=True, port=5000)

1 个回答

10

你的代码假设你的应用可以同时处理多个请求:一个是最初的请求,还有一个是在处理最初请求时产生的请求。

如果你像这样运行开发服务器 app.run(),它默认是在单线程模式下运行的;所以,它一次只能处理一个请求。

要让开发服务器支持多个线程,可以使用 app.run(threaded=True)


从Flask 1.0开始,开发服务器默认就是多线程的。

撰写回答