У меня есть приложение Django, которое я решил перенести в Google App Engine.
Я решил использовать NDB в качестве своей базы данных и перенес все модели (включая пользователя django). После одной недели чтения документации (документация App Engine ужасна, приведенные примеры часто устарели и больше не работают) и переноса приложения, когда я запускал его, оно было очень медленным: задержка 1-2 секунды с пустым к базе данных.
Запросы 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. Есть ли приложение? Engine способ импортировать модули?