私はPythonで書かれたGAEプロジェクトを持っています。私はバッチ操作を実行するためにcronを作った。しかし、F1インスタンスのソフト・プライベート・メモリー制限に達しました。これは数回の反復後に124MBです。誰も私がこのコードをより効率的に書いてくれるのを助けてくれるでしょうか、うまくいけば124MB以内です。 len(人)は500未満である必要があります。Python Google App Engineプロジェクトでメモリリークが発生しました。私の操作を書くための効率的な方法はありますか?
def cron():
q = Account.all().filter('role =', 1)
people = [e for e in q]
for p in people:
s = Schedule.available(p)
m = ScheduleMapper(s).as_dict()
memcache.set('key_for_%s' % p.key(), m)
これはdevサーバーです。インスタンスクラスをアップグレードしたくありません。さらに、numpyやpandasなどのサードパーティのライブラリを使用しないようにしたいと思います。
forループの最後の行にガベージコレクションを追加しました。しかし、それは動作していないようです。
del s
m.clear()
import gc
gc.collect()
あなたは何個のエンティティを取得しているかについて言及していません。また、私はループを関数とgcの外側に移動します。あなたが反復を言うときは、cronハンドラまたは外側または内側ループの呼び出しを意味しますか? –
コメントありがとうございます!エンティティの数は500未満でなければなりません。反復については、私は内部ループを意味しました。 – steve
内部ループの数。あなたのモデルを見ることなく、私はあなたのどこかの参考文献を保持していると思われます。 –