Skip to main content
 首页 » 编程设计

python之如何在调用 db.put() 之前在 GAE Python 中查找 db.Model 实例的大小

2025年05月04日13Renyi-Fan

我正在为我的应用程序编写一个优化器,因此尽可能少地调用 db.put()。我遇到了以下问题:

我有许多从 db.Model 派生的类。这些类的实例存储在列表中:

class DBPutter: 
    data = [] # list of instances 
    def add(self, model): 
        # HERE I WANT TO CHECK THAT self.data IS NOT EXEEDING 1MB 
        self.data.append(model) 
        if len(self.data) == 1000: 
            self.flush()  # actual call to db.put() using deferred 

通过这种方法,我收到了很多 RequestTooLargeError 异常。如何检查我的数据是否超过 1MB?

请您参考如下方法:

Pympler 有一个 asizeof 方法,应该在 python 2.5 中运行:http://code.google.com/p/pympler/

不过我认为您过度优化了。如果在您的推杆中有 1000 个对象之前关闭一个实例,您可能会丢失数据。此外,我认为使用具有大量数据的延迟库将导致至少两个 db.puts。一种是提交任务时(因为负载超过 10k),另一种是在任务中,实际编写模型。