我正在为我的应用程序编写一个优化器,因此尽可能少地调用 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),另一种是在任务中,实际编写模型。
