簡體   English   中英

內存泄漏使用龍卷風的gen.engine

[英]Memory leak using tornado's 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創建來處理函數異常的,它們應該被清除但很明顯你發現了一個bug。

我最好的猜測是,有一個參考留在某處。

編輯 - 龍卷風隊(Ben)找到了一個解決方案,它將在未來發布。 https://github.com/facebook/tornado/commit/bff07405549a6eb173a4cfc9bbc3fc7c6da5cdd7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM