我有一个名为MyUsers(db.Model)
的数据存储区,目前包含大约30个实体。
我编写了一个脚本,使用以下代码将所有实体的“name”属性打印到屏幕上(由'#'字符分隔):
def get(self):
q_1 = MyUsers.all().order('name')
for user in q_1:
self.response.out.write(user.name)
self.response.out.write("#")
脚本运行正常,但问题是我总是在应用引擎日志中收到关键消息:
12-12 12:45 AM 22.691
超出软内存限制 服务1个请求后总计220.043 MB
I 12-12 12:45 AM 22.691
此请求导致了一个新进程 为您的应用程序启动,并且 从而导致您的应用程序代码 第一次装。这个 因此请求可能需要更长时间并使用 比典型请求更多的CPU 你的申请。
W 12-12 12:45 AM 22.691
处理完此请求后, 处理此请求的进程是 发现使用了太多的内存和 被终止了。这很可能 导致一个新的进程用于 下一个请求您的申请。如果 你经常看到这条消息 你的内存可能有内存泄漏 应用
这似乎是一个非常简单的基本操作,不应超过任何内存限制,那么我该怎么做才能改进它?
谢谢,
乔尔
编辑:
对于进口,我使用的进口是:
from models.model import *
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import profiler.appengine.request
import profiler.appengine.datastore
我使用剖析器尝试了解错误,也许你可以提供帮助
谢谢!
乔尔
编辑2
这是代码的完整版本(问题发生在我导入探查器之前,我在尝试和调试之后使用它):
from models.model import MyUsers
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import profiler.appengine.request
import profiler.appengine.datastore
class PrintAll(webapp.RequestHandler):
def get(self):
q_1 = MyUsers.all().order('name')
for user in q_1:
self.response.out.write(user.name)
self.response.out.write("#")
application = webapp.WSGIApplication(
[('/print', PrintAll)
],
debug=True)
def main():
profiler.appengine.request.activate()
profiler.appengine.datastore.activate()
run_wsgi_app(application)
profiler.appengine.request.show_summary()
profiler.appengine.datastore.show_summary()
profiler.appengine.datastore.dump_requests() # optional
if __name__ == "__main__":
main()
至于MyUsers()模型类:
class MyUsers(db.Model):
user = db.UserProperty()
points = db.FloatProperty()
bonus = db.FloatProperty(default=0.0)
joindate = db.DateTimeProperty(auto_now_add=True)
lastEntry=db.DateTimeProperty(auto_now_add=True)
name=db.StringProperty()
last_name = db.StringProperty()
homepage = db.StringProperty()
hobbies = db.ListProperty(str)
other = db.StringProperty()
calculate1 = db.FloatProperty()
calculate2 = db.FloatProperty()
calculate3= db.IntegerProperty(default=0)
history = db.ListProperty(str)
history2 = db.ListProperty(str)
title = db.IntegerProperty(default=0)
title_string = db.StringProperty()
updateDate = db.DateTimeProperty(auto_now_add=True)
level=db.IntegerProperty(default=0)
debug_helper=db.IntegerProperty(default=0)
debug_list=db.ListProperty(str)
答案 0 :(得分:1)
目前看来,这并没有任何可能导致你所看到的错误的方法。你能提供完整的复制案例吗?除了您所包含的代码段之外的其他内容可能是导致此问题的原因。