为什么这段代码如此消耗CPU和内存?

0 投票
2 回答
567 浏览
提问于 2025-04-17 01:04

这段代码为什么会消耗0.32个CPU小时,并且平均内存使用量是24.6兆字节呢?

这个页面大约刷新了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

我也支持使用任务队列。用 mapreduce 来删除数据是个常见的做法。它会帮你管理这些任务。

一个小的优化方法是创建一个 webapp.WSGIApplication 实例,并把它存储在一个类变量里,这样就不需要每次调用 main() 时都新建一个。

0

我通过测试发现,如果一次获取200条数据,可以把CPU的使用率降低到原来的三分之一。

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

一次获取100条数据的速度其实比获取200条要慢。不过我会再看看mapreduce,但我觉得这可能不是问题所在。

撰写回答