什么在使用所有这些内存进行 google ndb 提取?
What is using all this memory for a google ndb fetch?
当我从数据存储中提取 1000 个模型时,它使用的内存比预期的多很多。我的数据存储表明我有 >18000,但总大小为 8.31MB
Application 18025 8.31 MB
这是获取实体的代码,禁用了缓存
def memoryForAThousandApplicationsNoCache():
ndb_ctx = ndb.get_context()
ndb_ctx.set_cache_policy(lambda key: False)
ndb_ctx.set_memcache_policy(lambda key: False)
startUsage = memory_usage().current()
applications = Application.query().fetch(1000)
return "Memory usage after applications: %d MB" % (memory_usage().current() - startUsage)
然后我得到
Memory usage after applications: 10 MB
什么在消耗所有这些内存?我在滥用 memory_usage 吗?
我猜您没有任何理由分析或深入研究 Python App Engine 之外的内存使用情况。除了来自对象的许多好处之外,在将事物表示为 Python 对象时还有大量的开销(对 low-level 程序员而言)。当您使用 ndb
之类的东西时,幕后还有额外的 (Python) 数据结构。
Google for "python memory overhead" 以查找更多背景信息。有一个不错的图表 in this question 可能具有指导意义。
当我从数据存储中提取 1000 个模型时,它使用的内存比预期的多很多。我的数据存储表明我有 >18000,但总大小为 8.31MB
Application 18025 8.31 MB
这是获取实体的代码,禁用了缓存
def memoryForAThousandApplicationsNoCache():
ndb_ctx = ndb.get_context()
ndb_ctx.set_cache_policy(lambda key: False)
ndb_ctx.set_memcache_policy(lambda key: False)
startUsage = memory_usage().current()
applications = Application.query().fetch(1000)
return "Memory usage after applications: %d MB" % (memory_usage().current() - startUsage)
然后我得到
Memory usage after applications: 10 MB
什么在消耗所有这些内存?我在滥用 memory_usage 吗?
我猜您没有任何理由分析或深入研究 Python App Engine 之外的内存使用情况。除了来自对象的许多好处之外,在将事物表示为 Python 对象时还有大量的开销(对 low-level 程序员而言)。当您使用 ndb
之类的东西时,幕后还有额外的 (Python) 数据结构。
Google for "python memory overhead" 以查找更多背景信息。有一个不错的图表 in this question 可能具有指导意义。