【问题标题】:What is using all this memory for a google ndb fetch?什么将所有这些内存用于 google ndb 提取?
【发布时间】:2018-08-28 18:04:38
【问题描述】:

当我从数据存储中获取 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?

【问题讨论】:

    标签: google-app-engine flask google-cloud-datastore app-engine-ndb


    【解决方案1】:

    我猜您没有任何理由在 App Engine 之外分析或挖掘 Python 内存使用情况。除了来自对象的许多好处之外,将事物表示为 Python 对象时,还会出现令人惊讶的(对于低级程序员而言)大量开销。当您使用 ndb 之类的东西时,幕后还有额外的 (Python) 数据结构。

    Google 搜索“python 内存开销”以查找更多背景信息。有一个不错的图表in this question 可能具有指导意义。

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 2012-01-20
      • 2014-03-09
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2013-12-21
      相关资源
      最近更新 更多