我想在 flask 应用中发送本地 REST 请求,如下所示:
from flask import Flask, url_for, request
import requests
app = Flask(__name__)
@app.route("/<name>/hi", methods=["POST"])
def hi_person(name):
form = {"name": name}
return requests.post(url_for("hi", _external=True), data=form)
@app.route("/hi", methods=["POST"])
def hi():
return 'Hi, %s!' % request.form["name"]
发送 curl -X POST http://localhost:5000/john/hi
会导致整个 flask 应用程序卡住。当我发送终止信号时,我收到了一个损坏的管道错误。有没有办法防止 flask 在这里结冰?
最佳答案
在能够处理并发请求(可能是 gunicorn 或 uWSGI)的适当 WSGI 服务器下运行您的 flask 应用程序,它会工作。开发时,在 Flask 提供的服务器中启用线程:
app.run(threaded=True)
但请注意,不建议将 Flask 服务器用于生产用途。从 Flask 1.0 开始,默认情况下启用 threaded
,并且您确实希望在命令行上使用 flask
命令来运行您的应用程序。
发生的情况是,使用请求您正在向您的 flask 应用发出 第二个 请求,但由于它仍在忙于处理第一个请求,因此在完成之前它不会响应第二个请求第一个请求。
顺便说一下,在 Python 3 下,socketserver 实现更优雅地处理断开连接并继续服务而不是崩溃。
关于python - 带有请求的 flask 损坏的管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12591760/