一尘不染

有要求的flask破损管

flask

我想在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冻结?


阅读 380

收藏
2020-04-05

共1个答案

一尘不染

在能够处理并发请求(可能是gunicorn或uWSGI)的适当WSGI服务器下运行flask应用程序,它将起作用。在开发时,请使用以下命令在Flask提供的服务器中启用线程:

app.run(threaded=True)

但请注意,不建议将Flask服务器用于生产环境。从Flask 1.0开始,threaded默认情况下处于启用状态flask,实际上,你想使用命令行上的命令来运行你的应用程序。

发生的情况是,使用请求你正在向flask应用程序发出第二个请求,但是由于它仍在忙于处理第一个请求,因此只有在处理完第一个请求后,它才会响应第二个请求。

顺便说一下,在Python 3下,socketserver实现可以更优雅地处理断开连接,并继续提供服务而不是崩溃。

2020-04-05