Python 使用tornado'的内存泄漏;通用发动机

Python 使用tornado'的内存泄漏;通用发动机,python,asynchronous,memory-leaks,tornado,Python,Asynchronous,Memory Leaks,Tornado,我有一个简化的代码,如下所示: 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 fetc

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

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上用不同版本的tornado 2重现了这个问题。你知道这个问题的原因吗?

在objgraph包的帮助下深入研究,看起来代码泄漏了ExceptionsTackContext。这些由gen.engine创建,用于处理功能异常, 它们应该被清除,但很明显你发现了一个bug

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

编辑-Tornado团队(Ben)已经找到了一个修复方案,它将在未来的版本中发布。

看起来正是这样。我们将测试它。谢谢