我有一个 Django 应用程序,我决定将它移植到 Google App Engine。
我决定使用 NDB 作为我的数据库并移植了所有模型(包括 django 用户)。在阅读文档一周后(App Engine 文档很糟糕,给出的示例通常已经过时并且不再工作)并移植应用程序,当我运行它时它真的很慢:1s-2s 延迟与空数据库。
ndb 查询不需要太多时间(少于 50 毫秒),并且Appstats应用程序没有向我显示任何其他内容。
我决定使用cProfile并创建了一个 wsgi 中间件,但我不知道如何打印输出。pstats 方法给我打印输出或将其保存到文件,我不能在 wsgi 处理程序中做任何事情。
我的代码如下:
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 视图中使用了很多模块导入是否有 App Engine 方法来导入模块?