1
class queryFactory(object):

    def __init__(self, request, sql,params):
        self.request=request
        self.sql=sql
        self.params=params


    def run_it(self):
        def getQuery():
            return dbpool.runQuery(self.sql, self.params)

        def onResult(data):
            self.request.write("done")
            self.request.finish()

        d = getQuery()
        d.addCallback(onResult)
        return NOT_DONE_YET

render_POST から上記のクラスを作成し、そのインスタンスの run_it メソッドを返しました

ただし、self.sql クエリがメモリ使用量が 500 MB に達する巨大なデータを返す場合、メモリが OS に戻されないことに気付きました。アプリケーションを再起動するまで、プロセスはそのまま保持されます。onResult 内で gc.collect() を実行しても運がありませんでした。

これはなぜですか?

注:onResultに渡された「データ」を実際に使用しなかったことを絞り込むことができるように、onResultから他のコードを削除する必要がありました。

4

0 に答える 0