我有一些代码,大概做了这样的GAE工人的任务里面:在Google App Engine上创建大批数据存储对象的最有效的内存方式是什么?
list_of_dicts = xmlrpc_call(...)
objects_to_put = []
for row in list_of_dicts.items():
object = DatastoreModel(**row)
object.x = ...
objects_to_put.append(object)
db.put(objects_to_put)
我也试过这样:
list_of_dicts = xmlrpc_call(...)
objects_to_put = []
for row in list_of_dicts.items():
object = DatastoreModel(**row)
object.x = ...
objects_to_put.append(object)
if len(objects_to_put) > 10:
db.put(objects_to_put)
objects_to_put = []
db.put(objects_to_put)
(这个想法是把所有的10个对象,以避免有一个巨大的名单)
问题,总是,这个代码块显然占用大量的内存,即使列表是相对较小(~100项),并在拉斯维加斯的每个项目t只包含几个键。没有大的斑点,大块的字符串,或者其他任何东西,但相对较小的土豆数据结构。
是什么导致这名工人每次运行时超过其内存配额,我怎么能高效地创建数据存储对象的一个比较大的(〜100左右)是多少?
这是唯一的请求吗?你确定这是罪魁祸首吗?其他处理程序呢? – 2012-01-15 22:59:22
很明显,这是一个要求。我并没有完全排除在该请求中可能会发生其他问题,但这似乎不太可能。这是一个工作者请求,它简单地引入一些xmlrpc,并将其转换为datastrore对象。 – 2012-01-16 22:17:05