18

我正在构建一个访问烧瓶/python RESTful API 的前端。我正在使用 AngularJS v1.2.16。

出于某种原因,加载 REST 资源需要花费大量时间,而且大部分时间都在等待。我的理解是“等待”是测量第一个字节的时间——我的所有服务都在本地运行(前端、API 和数据库)。

Angular、API 和 Mongo DB 都在本地运行。

鉴于服务都在本地运行,我不知道如何调试它。有人对在哪里看有任何提示吗?我检查了我所有的方法,它们运行得相当快(每个 REST 调用不到 100 毫秒)。当我使用postman时,API 几乎立即返回。

关于如何解决等待的任何想法,似​​乎只有在通过 Angular 加载 RESTful 资源时才会出现这种情况。角度 $http 获取请求相当简单:

myAppControllers.controller('ManageCtrl', ['$scope', '$http',
    function($scope, $http) {
        $http({
            url: 'http://127.0.0.1:5000/v1/domains/',
            method: "GET",
            headers: { 'Content-Type': 'application/json' },
        }).
        success(function(data, status, headers, config) {
            console.log('login successful');
            console.log(status);
            console.log(data);
        }).
        error(function(data, status, headers, config) {
            console.log('login failed');
        });
    }]);

编辑:

  • 该问题仅出现在 Google Chrome 常规模式中。
  • 使用隐身模式时 GET 请求很快。
4

4 回答 4

23

我们遇到了同样的问题,经过一些研究,问题与 Chrome 使用连接的方式以及烧瓶的默认配置为单线程有关。

启动烧瓶应用程序时添加了 threaded=true 解决了问题:

app.run(threaded=True)
于 2015-06-05T15:42:50.567 回答
13

我遇到了同样的问题(在 Chrome 和 Flask 后端运行的 Angular 前端)。在尝试了 Angular 1.2.x 和 1.3.x 以及十亿个其他排列之后,我发现的唯一“解决方案”是使用 Tornado Web 服务器运行 Flask 后端(http://www.tornadoweb.org/en /稳定/)。其他 WSGI 容器也可以工作,但这是我测试过的。

在您的 Flask 应用程序中,粘贴以下内容:

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop

if __name__ == '__main__':
  http_server = HTTPServer(WSGIContainer(app))
  http_server.listen(5000)
  IOLoop.instance().start()

您可以通过键入以下内容来启动您的 Web 服务器:

python myserver.py
于 2014-09-14T15:44:27.413 回答
0

我现在面临着非常相似的问题。我目前的解决方案(此时我的厨师可以接受 :) ),不幸的是没有消除所有问题,是设置 header: { 'Content-Type': 'application/json' }to { 'Content-Type': 'text/plain' }。现在只有第一个GET请求非常慢,任何下一个请求都不到 500 毫秒。我Restangular在前端和wsgiref.simple_server后端使用。

于 2015-10-07T17:34:23.117 回答
0

我也想把它绑起来。但

app.run(threaded=True) 

为我工作!

于 2017-10-01T20:22:42.390 回答