gpt4 book ai didi

python - 在 Google App Engine 上创建大量数据存储对象的最节省内存的方法是什么?

转载 作者:行者123 更新时间:2023-12-01 06:04:24 24 4
gpt4 key购买 nike

我有一些代码在 GAE 工作任务中大致执行此操作:

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 个项目)并且最后一个项目中的每个项目只包含一个几把 key 。这里没有大的 Blob 、大的字符串 block ,或者除了相对较小的土 bean 数据结构之外的任何东西。

是什么导致该工作线程每次运行时都超出其内存配额?如何有效地创建相对较大(约 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工具可以跟踪开发服务器中的内存使用情况。但是,它仅在开发服务器上运行。 http://code.google.com/p/apptrace/wiki/UsingApptrace

Since apptrace is meant for development and debugging purposes only, it works with the development appserver of the Google App Engine Python SDK and TyphoonAE. It will definitely not work on the GAE production environment.

关于python - 在 Google App Engine 上创建大量数据存储对象的最节省内存的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8873314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com