在烧瓶路由功能中使用请求模块



考虑以下最小工作烧瓶应用程序:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "I am /"
@app.route("/api")
def api():
    return "I am /api"
if __name__ == "__main__":
    app.run()

这很愉快。但是当我尝试使用从hello路由到api路由的"requests"模块发出GET请求时 - 尝试访问http://127.0.0.1:5000/时,我从未在浏览器中得到响应

from flask import Flask
import requests
app = Flask(__name__)
@app.route("/")
def hello():
    r = requests.get("http://127.0.0.1:5000/api")
    return "I am /" # This never happens :(
@app.route("/api")
def api():
    return "I am /api"
if __name__ == "__main__":
    app.run()

所以我的问题是:为什么会发生这种情况,我该如何解决这个问题?

您正在使用 Flask 测试服务器运行 WSGI 应用程序,默认情况下,该服务器使用单个线程来处理请求。因此,当您的一个请求线程尝试回调到同一服务器时,它仍然忙于尝试处理该请求

您需要启用线程:

if __name__ == "__main__":
    app.run(threaded=True)

或使用更高级的 WSGI 服务器;请参阅部署选项。

最新更新