В целом ваша методология может заключаться в том, чтобы делать временные блоки вокруг разделов кода, а затем выдавать операторы журналирования. Что касается выключения после init, я не знаком со спецификой того, что вы используете.
Edit: я использовал это промежуточное программное обеспечение, чтобы помочь мне найти провалы производительности. В настоящее время это промежуточное программное обеспечение werkzeug, вы можете адаптировать его для своего использования. Надеюсь, это поможет
<code>import re
re_profile = re.compile(ur'(^|&|\?)prof($|=|&)')
class ProfilerMiddleware(BaseProcessor):
def process_runner(self, runner, environ):
self.profiler = None
if (environ['REMOTE_ADDR'] in settings_static.internal_ips or settings_static.local_server) and re_profile.match(environ['QUERY_STRING']):
self.profiler = cProfile.Profile()
def wrap(*args, **kwargs):
return self.profiler.runcall(runner, *args, **kwargs)
return wrap
def process_response(self, request, response):
if self.profiler:
self.profiler.create_stats()
out = StringIO.StringIO()
old_stdout, sys.stdout = sys.stdout, out
#from dozer.profile import buildtree, write_dot_graph
#write_dot_graph(self.profiler.getstats(), buildtree(self.profiler.getstats()), "/tmp/output.gv")
self.profiler.print_stats(1)
sys.stdout = old_stdout
response.response = [u'<pre>%s
'% to_unicode (out.getvalue ())]
response.content_type = 'text / html'