Django 应用程序引擎WSGI中间件探查器

Django 应用程序引擎WSGI中间件探查器,django,google-app-engine,python-2.7,wsgi,cprofile,Django,Google App Engine,Python 2.7,Wsgi,Cprofile,我有一个Django应用程序,我决定将其移植到Google应用程序引擎。 我决定使用NDB作为我的数据库,并移植了包括django user在内的所有模型。在阅读了一周的文档后,AppEngine文档非常糟糕,给出的示例通常已经过时,不再适用,移植应用程序时速度非常慢:1s-2s延迟,数据库为空。 ndb查询所用的时间不超过50毫秒,并且应用程序不会向我显示任何其他内容。 我决定使用并创建了一个wsgi中间件,但我不知道如何打印输出。pstats提供的方法要么打印输出,要么将其保存到文件中,而我

我有一个Django应用程序,我决定将其移植到Google应用程序引擎。 我决定使用NDB作为我的数据库,并移植了包括django user在内的所有模型。在阅读了一周的文档后,AppEngine文档非常糟糕,给出的示例通常已经过时,不再适用,移植应用程序时速度非常慢:1s-2s延迟,数据库为空。 ndb查询所用的时间不超过50毫秒,并且应用程序不会向我显示任何其他内容。 我决定使用并创建了一个wsgi中间件,但我不知道如何打印输出。pstats提供的方法要么打印输出,要么将其保存到文件中,而我在wsgi处理程序中无法执行任何操作。
import logging
logging.info("timing info")
我的代码如下:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
from django.core.handlers import wsgi

from webob import Request
class AppProfiler(object):  
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):  
        from django.core.files.base import ContentFile 

        self.req = Request(environ)
        import cProfile, pstats
        prof = cProfile.Profile()
        prof = prof.runctx("self.get_resp()", globals(), locals())

        print "<pre>"
        stats = pstats.Stats(prof)
        #stats.dump_stats(output)
        stats.print_stats(80)
        print "</pre>"

        body = self.resp.body # here i should append the stats data
        self.resp.body = body

        return self.resp(environ, start_response)

    def get_resp(self):
        self.resp = self.req.get_response(self.app)

app = wsgi.WSGIHandler() 
profiler = AppProfiler(app)
如何将探查器统计信息附加到主体? 还是有更好的方法来找出是什么让我的应用程序变慢了?
我在django视图中使用了大量模块导入,是否有应用程序引擎方法导入模块?

您应该使用appstats。这个工具正是为此而制造的。
您应该使用appstats。这个工具正是为此而制造的。

已经有一个很棒的WSGI应用程序,您可以轻松地将其集成到名为google app engine mini profiler的项目中

gae_mini_profiler是一款快速下载的WSGI应用程序,提供无处不在的 对现有GAE项目的评测。它公开了两个RPC 您在上选择的用户的统计信息和标准分析输出 您的生产站点。仅来自您选择的用户的请求 将被分析,其他人不会受到任何影响 退化


请看一下作者Ben Kamens写的这篇文章,或者直接转到

已经有一个很棒的WSGI应用程序,您可以轻松地将其集成到您的项目中,名为google app engine mini profiler

gae_mini_profiler是一款快速下载的WSGI应用程序,提供无处不在的 对现有GAE项目的评测。它公开了两个RPC 您在上选择的用户的统计信息和标准分析输出 您的生产站点。仅来自您选择的用户的请求 将被分析,其他人不会受到任何影响 退化


请看一下作者Ben Kamens写的这篇文章,或者直接转到

首先,我认为cProfile不起作用,因为它是一个C库

当你解决这个问题时,我能想到的最简单的事情就是将分析器数据输出到日志中

对于启动请求来说,1-2秒并不是不寻常的,即如果应用程序引擎必须启动一个新实例来处理您的请求。日志将指示哪些请求是启动请求


如果您正在运行许多请求,但它们仍然需要很长时间,那么您的代码中的某个地方就存在问题。

首先,我认为cProfile不起作用,因为它是一个C库

当你解决这个问题时,我能想到的最简单的事情就是将分析器数据输出到日志中

对于启动请求来说,1-2秒并不是不寻常的,即如果应用程序引擎必须启动一个新实例来处理您的请求。日志将指示哪些请求是启动请求


如果您正在运行许多请求,但它们仍然需要很长时间,然后,您的代码中的某个地方出现了问题。

正如我所说,我使用了appstats,但它只显示了数据存储查询。正如我所说,我使用了appstats,但它只显示了数据存储查询。我清理了django URL和视图,只留下了一个带有Hello World消息的视图,它有500-1s的延迟,这就是对于hello world消息仍然有很多。我已经清理了我的django URL和视图,只留下了一个包含hello world消息的视图,它有500-1s的延迟,对于hello world消息仍然有很多。谢谢!这比我想要的要好。希望我能找到是什么拖累了我的应用程序。似乎django模板系统使用了965ms中的579ms。{method'read'of'file'objects}303.44ms和{open}275.57ms。我不知道如何优化这个。谢谢!这比我想要的要好。希望我能找到是什么拖累了我的应用程序。似乎django模板系统使用了965ms中的579ms。{method'read'of'file'objects}303.44ms和{open}275.57ms。我不知道如何优化它。启动请求需要更长的10秒。无论我发送多少请求,它都会保持恒定的1-2秒。启动请求需要更长的10秒。无论我发送多少个请求,它都保持不变1-2秒。