为什么这段代码如此消耗CPU和内存?
这段代码为什么会消耗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,但我觉得这可能不是问题所在。