为什么这段代码会占用CPU和内存?

时间:2011-09-01 11:06:56

标签: python google-app-engine optimization

为什么这段代码需要0.32个CPU小时,并且平均内存为24.6 MB? 页面刷新大约30次,直到它停止,因为没有更多的数据存储区实体。

class MainHandler(webapp.RequestHandler):
    def get(self):
        found = False
        q = MyModel.all(keys_only=True).fetch(1000)
        if len(q):
            self.response.out.write("Deleted %d MyModel entries" % len(q))
            found = True
            db.delete(q)

        q = MyModel2.all(keys_only=True).fetch(1000)
        if len(q):
            self.response.out.write("Deleted %d MoModel2 entries" % len(q))
            found = True
            db.delete(q)

        if found:
            self.response.out.write('<meta http-equiv="Refresh" content="0"/>')
def main():
    application = webapp.WSGIApplication([('/', MainHandler)], debug=True)
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()

我能做些什么来加快速度并减少使用内存?

谢谢

2 个答案:

答案 0 :(得分:0)

借调任务队列。使用mapreduce删除实体是一种常见做法。它会为你管理任务。

微优化是指制作一个webapp.WSGIApplication并从类变量中重用它,而不是每次调用main()时都创建一个新变量。

答案 1 :(得分:0)

我通过测试发现,我只能通过一次获取200个条目来降低CPU使用率3倍:

q = MyModel.all(keys_only=True)
for i in xrange(0, 1000, 200):
    db.delete(q.fetch(200))

一次获取100个结果实际上比一次获取200个结果要慢。 但我会检查mapreduce,但我不认为这是一件事

相关问题