Python 什么';在Google App Engine上创建大批量数据存储对象的内存效率最高的方法是什么?
我有一些代码在GAE worker任务中大致实现了这一点:Python 什么';在Google App Engine上创建大批量数据存储对象的内存效率最高的方法是什么?,python,google-app-engine,memory,Python,Google App Engine,Memory,我有一些代码在GAE worker任务中大致实现了这一点: 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
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项),并且最后一段代码中的每个项只包含几个键。这里除了相对较小的数据结构之外,没有大的blob、大的字符串块或任何东西
是什么导致此worker每次运行时都超过其内存配额?如何有效地创建相对较大(约100个)数量的数据存储对象?我认为第二种方法和添加del关键字会更好。 但很难说它能解决你的问题
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_async(objects_to_put)
del objects_to_put[:]
db.put_async(objects_to_put)
有一个AppTrace工具可以跟踪development server中的内存使用情况。但是,它仅在开发服务器上运行。
由于apptrace仅用于开发和调试目的,
它与Google应用程序引擎的appserver开发一起工作
pythonsdk和typhonae。这绝对不会对GAE起作用
生产环境
这是请求所做的唯一事情吗?你确定这就是罪魁祸首吗?其他处理人员呢?显然是这个要求,是的。我还没有完全排除在那个请求中出现其他乱七八糟的事情的可能性,但这似乎不太可能。这是一个工作者请求,它只是拉入一些xmlrpc,并将其转换为datastrore对象。谢谢