Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';在Google App Engine上创建大批量数据存储对象的内存效率最高的方法是什么?_Python_Google App Engine_Memory - Fatal编程技术网

Python 什么';在Google App Engine上创建大批量数据存储对象的内存效率最高的方法是什么?

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

我有一些代码在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 = 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对象。谢谢