内存泄漏使用龙卷风的gen.engine

我有一个简单的代码,如下所示:

from tornado import gen, httpclient, ioloop

io_loop = ioloop.IOLoop.instance()
client = httpclient.AsyncHTTPClient(io_loop=io_loop)

@gen.engine
def go_for_it():
    while True:
        r = yield gen.Task(fetch)

@gen.engine
def fetch(callback):
    response = yield gen.Task(client.fetch, 'http://localhost:8888/')
    callback(response)

io_loop.add_callback(go_for_it)
io_loop.start()

当我运行它时,内存占用会随着时间的推移或多或少呈线性增长。 但是,如果我删除gen.engine嵌套:

@gen.engine
def go_for_it():
    while True:
        r = yield gen.Task(client.fetch, 'http://localhost:8888/')

内存使用率保持不变。

我设法在Mac OS X和Linux上用不同版本的龙卷风2重现了这个问题。 任何想法可能是这个问题的原因?


在objgraph包的帮助下挖掘它,它看起来像代码泄漏ExceptionStackContexts。 这些由gen.engine创建以处理函数异常,它们应该被清除,但显然你发现了一个错误。

我最好的猜测是,有一个引用留在某个地方。

编辑 - 龙卷风团队(奔)已经找到了一个修复,它将在未来的版本。 https://github.com/facebook/tornado/commit/bff07405549a6eb173a4cfc9bbc3fc7c6da5cdd7

链接地址: http://www.djcxy.com/p/11475.html

上一篇: Memory leak using tornado's gen.engine

下一篇: Install SD Card Vs Phone memory? and why the size of the app differs?