Ошибка модуля профилирования Django - PullRequest
1 голос
/ 08 сентября 2010

У меня ошибка из следующего кода.Я уверен, что это очевидно для человека с большим опытом работы с Python.Это фрагмент из http://djangosnippets.org/snippets/727/

<code>import sys
import cProfile
from cStringIO import StringIO
from django.conf import settings

class ProfilerMiddleware(object):
    def process_view(self, request, callback, callback_args, callback_kwargs):
        if settings.DEBUG and 'prof' in request.GET:
            self.profiler = cProfile.Profile()
            args = (request,) + callback_args
            return self.profiler.runcall(callback, *args, **callback_kwargs)

    def process_response(self, request, response):
        if settings.DEBUG and 'prof' in request.GET:
            self.profiler.create_stats()
            out = StringIO()
            old_stdout, sys.stdout = sys.stdout, out
            self.profiler.print_stats(1)
            sys.stdout = old_stdout
            response.content = '<pre>%s
'% out.getvalue () return response

Я реализовал его как промежуточное ПО и получаю следующую ошибку на страницах

Traceback (most recent call last):

  File "c:\Python26\lib\site-packages\django\core\servers\basehttp.py", line 280, in run
    self.result = application(self.environ, self.start_response)

  File "c:\Python26\lib\site-packages\django\core\servers\basehttp.py", line 674, in __call__
    return self.application(environ, start_response)

  File "c:\Python26\lib\site-packages\django\core\handlers\wsgi.py", line 245, in __call__
    response = middleware_method(request, response)

  File "C:\Users\Richard\workspace\race\src\race\..\race\middleware\ProfilerMiddleware.py", line 15, in process_response
    self.profiler.create_stats()

AttributeError: 'ProfilerMiddleware' object has no attribute 'profiler'

Есть идеи?

1 Ответ

0 голосов
/ 08 сентября 2010

Спасибо за ваш вклад, Сет и Ник,

Я исправил это. Я не понимаю, что вызвало это, но это связано с порядком вызова моего промежуточного программного обеспечения.

Я отладил его на основе комментария Ника о том, что process_view не был вызван для создания объекта. (Я до сих пор не привык к сообщениям об ошибках Python, чтобы забрать его!) Я избавился от функции process_response и поместил оператор print в process_view и, конечно же, оператор печати не был выведен на консоли разработчика, доказывая, что process_view не получал называется. Я подозревал порядок настроек промежуточного программного обеспечения и мне повезло.

У меня были следующие настройки, последние две строки моего промежуточного программного обеспечения:

Не работает: 'Firepython.middleware.FirePythonDjango', 'Race.middleware.ProfilerMiddleware.ProfilerMiddleware',

Рабочая: 'Race.middleware.ProfilerMiddleware.ProfilerMiddleware', 'Firepython.middleware.FirePythonDjango',

Не знаю, почему это так. Иногда у меня есть кое-что забавное с FirePython, так что, возможно, это связано. Я немного узнал, так что, возможно, у меня больше шансов исправить FirePython в результате.

Спасибо, ребята

Rich

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...