gpt4 book ai didi

python - Google App Engine内存中存储300MB的解决方案

转载 作者:行者123 更新时间:2023-12-01 06:09:40 25 4
gpt4 key购买 nike

我正在 Python 中使用 Google App Engine。我的数据库中有 5000 人。包含 5000 个人物对象的整个列表占用 300 MB 内存。

我一直在尝试使用 blobcache 将其存储在内存中,这是一个[此处][1]编写的模块。

我遇到了“OutOfMemory”问题,正在寻找一种解决方案,将这 5000 个对象存储到数据库中,然后一次性检索它们。

我的人物模型看起来像这样。

class PersonDB(db.Model):
serialized = db.BlobProperty()
pid = db.StringProperty()

每个人都是一个具有许多与之关联的属性和方法的对象,因此我决定对每个人对象进行pickle并将其存储为序列化字段。 pid 只允许我通过他们的 id 查询该人。我的人看起来像这样

class Person():
def __init__(self, sex, mrn, age):
self.sex = sex;
self.age = age; #exact age
self.record_number = mrn;
self.locations = [];

def makeAgeGroup(self, ageStr):
ageG = ageStr
return int(ageG)

def addLocation(self, healthdistrict):
self.locations.append(healthdistrict)

当我一次将所有 5000 人存储到数据库中时,我收到服务器 500 错误。有谁知道为什么?我的代码如下:

   #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()

如何在 App Engine 方法中一次检索所有 5000 个对象?

我的想法是做这样的事情

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.append(pickle.loads(person.serialized))

提前感谢您的帮助,我已经被困在这个问题上有一段时间了!!

最佳答案

您不应该同时将所有 5000 个用户存储在内存中。只检索您需要的那个。

关于python - Google App Engine内存中存储300MB的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6540769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com