【问题标题】:Flask RESTful API request, Broken pipe [Errno 32] !Flask RESTful API 请求,管道损坏 [Errno 32] !
【发布时间】:2016-04-30 19:54:17
【问题描述】:

我是 Web 开发的新手,我正在尝试使用 Flask 微框架创建一个 RESTful Web 服务。

这是我的代码:

app = Flask(__name__)       

client = MongoClient()
db = client.markets

def toJson(data):
    return json.dumps(data, default=json_util.default)

@app.route('/', methods=['GET'])

def get_tasks():
    cursor = db.europe.find()
    list = []

    for i in cursor:
        list.append(i)

    return toJson(list)

当我从浏览器发送请求时,它一直在等待服务器并且没有任何返回。

最终我会看到终端中运行的烧瓶服务器会给我:[Errno 32] Broken pipe。

我的收藏有 150 万个条目,每个条目大约有 20 个属性。会不会是请求太大了?

提前致谢。

【问题讨论】:

    标签: python mongodb rest flask pymongo


    【解决方案1】:

    Broken pipe 表示您的烧瓶进程想要与之通信的 socketpipe 的另一端已死。考虑到您正在与数据库交互,很可能数据库已终止连接或连接因其他原因而终止。

    您可能应该分析您在数据库上运行的查询,因为代码本身似乎没有明显的问题。

    尝试在您的MongoDB 上手动运行查询,看看会发生什么。查询是否成功返回?

    您提到要花费大量时间才能收到该错误。会不会是某些索引在您的架构中丢失或未正确使用,导致查询执行非常慢,并且在等待很长时间后达到超时(例如maxTimeMS)?

    【讨论】:

    • 感谢您的回复。我有一些关键属性的索引,当进行一些特定的查询时,数据会返回到浏览器中。但是,如果我想返回所有条目,就像代码中一样?在这里,我得到了破损的管道。在这种情况下,我是否应该单独提出请求,因为查询太大了?
    • 是的,如果Broken Pipe 只发生在某些查询上并且总是在很长一段时间后发生,那么查询可能执行时间过长。要考虑的另一件事是应用程序服务器中的内存使用情况,如果您有大量数据,您可能不想将所有数据都加载到内存中。
    猜你喜欢
    • 2021-01-04
    • 2017-04-22
    • 2014-04-28
    • 1970-01-01
    • 2013-04-16
    • 2021-10-11
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多