为什么这段代码需要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()
我能做些什么来加快速度并减少使用内存?
谢谢
答案 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,但我不认为这是一件事