2011-03-02 105 views
1

我做错了什么或者web.py泄漏内存?web.py内存泄漏

import web 

class Index: 
    def GET(self): return 'hello web.py' 
app = web.application(('/*', 'Index'), globals()) 
app.run() 

运行上述文件。观察任务使用多少内存。在浏览器中转到localhost:8080。关闭浏览器(保持页面不被缓存),然后再次打开页面,查看内存使用情况如何上升。每次关闭浏览器并重新访问该页面时,它都会上升。

在Win XP上运行python 2.6。

+0

可能是python进程在Windows上使用的某种底层资源(CLOSE_WAIT模式下的套接字缓冲区等) – Novikov 2011-03-02 02:41:07

回答

4

在运行你的代码并发送了数以千计的请求(通过使用urllib2的另一个Python进程)之后,我发现它在前几百次请求过程中增长了大约200k,然后停止增长。这似乎并不合理,并且不需要指出内存泄漏。请记住,Python通过引用计数和垃圾收集的组合来使用自动内存管理,所以不能保证它使用的每一块内存都可以在不再使用的时候重用;并且它可以从操作系统请求内存,然后即使不再需要它也不返回。

所以我认为答案是:你没有做错任何事,但web.py不会泄漏内存。

+0

+1为“web.py不泄漏内存”。 Yandex每天使用web.py来处理7000万页的浏览量。你很可能不会发现一个严重的资源泄漏问题,触及“Hello world!”应用程序与您的浏览器一次一页。我还用urllib2打了几百次演示应用程序,内存使用情况似乎相当稳定。 – 2011-03-02 02:55:44

+0

啊,是的,我应该想到使用urllib来检查。谢谢。 – 2011-03-02 03:22:09