2024-05-23 17:45:07 发布
网友
Python的paster serve app.ini花费的时间比第一个请求准备好的时间要长。在
paster serve app.ini
我知道如何使用中间件来分析请求,但是如何分析初始化时间呢?我希望它不分叉线程池,并在它准备好服务后立即退出,这样它准备好之后的时间不会出现在配置文件中。在
即使你想对它进行分析-我怀疑你能得到多少优化的提示。在
我们在mod廑wsgi设置中使用了Paster,为了减少启动时间,使用户不受影响,并确保正确设置了例如toscawidgets,我们这样做:
app = paste.fixture.TestApp(application) # TODO-dir: FIXME, must go away! try: app.get("/") except: pass
这里的应用程序当然是初始化/加载的粘贴应用程序。在
一般来说,您的方法可以是围绕代码部分设置计时块,然后发出日志记录语句。至于init之后的关闭,我不熟悉您使用的具体内容。在
用来帮助我找到性能漏洞的中间件。它目前是一个werkzeug中间件,您可以根据自己的使用情况调整它。希望有帮助
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</pre>' % to_unicode(out.getvalue())] response.content_type = 'text/html'
我几乎总是在开发过程中使用paster serve reload ...。该命令作为子进程执行自己(它使用subprocess模块而不是fork()执行自己的脚本)。在
paster serve reload ...
subprocess
fork()
子进程轮询源代码更改,在检测到更改时退出,并由父进程paster serve reload重新启动。在
paster serve reload
也就是说,如果要分析paster serve本身,请忽略 reload参数。无论哪种方式,使用中间件分析单个请求都可以正常工作。在
paster serve
reload
我的特殊问题是pkg_resources在第一次调用时所花费的时间与所有已安装的包成比例。我通过重建我的virtualenv解决了这个问题,没有不必要的包。在
pkg_resources
即使你想对它进行分析-我怀疑你能得到多少优化的提示。在
我们在mod廑wsgi设置中使用了Paster,为了减少启动时间,使用户不受影响,并确保正确设置了例如toscawidgets,我们这样做:
这里的应用程序当然是初始化/加载的粘贴应用程序。在
一般来说,您的方法可以是围绕代码部分设置计时块,然后发出日志记录语句。至于init之后的关闭,我不熟悉您使用的具体内容。在
用来帮助我找到性能漏洞的中间件。它目前是一个werkzeug中间件,您可以根据自己的使用情况调整它。希望有帮助
我几乎总是在开发过程中使用
paster serve reload ...
。该命令作为子进程执行自己(它使用subprocess
模块而不是fork()
执行自己的脚本)。在子进程轮询源代码更改,在检测到更改时退出,并由父进程
paster serve reload
重新启动。在也就是说,如果要分析
paster serve
本身,请忽略reload
参数。无论哪种方式,使用中间件分析单个请求都可以正常工作。在我的特殊问题是
pkg_resources
在第一次调用时所花费的时间与所有已安装的包成比例。我通过重建我的virtualenv解决了这个问题,没有不必要的包。在相关问题 更多 >
编程相关推荐