python - 带有请求的 flask 损坏的管道

标签 python ubuntu python-2.7 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 应用程序卡住。当我发送终止信号时,我收到了一个损坏的管道错误。有没有办法防止 flask 在这里结冰?

最佳答案

在能够处理并发请求(可能是 gunicornuWSGI)的适当 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/

相关文章:

python - 为 EC2 配置结构

python - pandas 系列 - 每个值的最大值/最小值

python - 为什么使用python split时字符串会改变?

Python:转义字符串变量中的单引号和双引号的一些特殊方法

python - pickle 在不同的范围内如何工作?

Python TKinter 下拉菜单问题

ubuntu - 不支持 Ubuntu 中的 Docker 将文件系统切换到覆盖?

python - 如何在 python 中使用 Selenium 关闭浏览器弹出窗口?

Python 使用 Popen 的子进程超时

ubuntu - 无法从 ubuntu 上的终端引用 genesis.json 文件