代码之家  ›  专栏  ›  技术社区  ›  hassassin

什么在使用这些内存进行google ndb获取?

  •  2
  • hassassin  · 技术社区  · 7 年前

    当我从数据存储中提取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\u用法?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Dave W. Smith    7 年前

    我猜您没有任何理由分析或深入了解应用程序引擎之外的Python内存使用情况。除了对象带来的许多好处之外,将对象表示为Python对象时,还会产生惊人的开销(对于低级程序员来说)。当你使用 ndb ,在幕后有额外的(Python)数据结构。

    谷歌搜索“python内存开销”以查找更多背景信息。有一个不错的图表 in this question 这可能很有启发性。