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から他のコードを削除する必要がありました。