基本SELECT超出软内存限制

时间:2010-12-12 08:56:12

标签: google-app-engine

我有一个名为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

我使用剖析器尝试了解错误,也许你可以提供帮助 Debug from profiler

谢谢!

乔尔


编辑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)

1 个答案:

答案 0 :(得分:1)

目前看来,这并没有任何可能导致你所看到的错误的方法。你能提供完整的复制案例吗?除了您所包含的代码段之外的其他内容可能是导致此问题的原因。