<p>我在谷歌应用程序中使用Python引擎。我的数据库里有5000人。5000个人对象的整个列表占用300 MB内存。在</p>
<p>我一直试图用blobcache将这个存储在内存中,blobcache是一个写在[here][1]的模块。在</p>
<p>我遇到了pickle“OutOfMemory”问题,正在寻找一种解决方案,它涉及将这5000个对象存储到数据库中,然后一次检索它们。在</p>
<p>我的人体模型是这样的。在</p>
<pre><code>class PersonDB(db.Model):
serialized = db.BlobProperty()
pid = db.StringProperty()
</code></pre>
<p>每个person都是一个对象,它有许多相关的属性和方法,所以我决定pickle每个person对象并将其存储为序列化字段。pid允许我通过id查询此人</p>
^{pr2}$
<p>当我一次将5000人存储到我的数据库中时,我得到一个服务器500错误。有人知道为什么吗?我的代码如下:</p>
<pre><code> #People is my list of 5000 people objects
def write_people(self, people):
for person in people:
personDB = PersonDB()
personDB.serialized = pickle.dumps(person)
personDB.pid = person.record_number
personDB.put()
</code></pre>
<p>如何在appengine方法中一次检索所有5000个对象?在</p>
<p>我的想法是做这样的事</p>
<pre><code>def get_patients(self):
#Get my list of 5000 people back from the database
people_from_db = db.GqlQuery("SELECT * FROM PersonDB")
people = []
for person in people_from_db:
people.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(pickle.loads(person.serialized))
</code></pre>
<p>提前谢谢你的帮助,我已经在这个问题上耽搁了一段时间!!在</p>