【问题标题】:How long do zipimported module imports remain cached in memory when using appengine / python and is there a way to keep them in memory?使用应用程序引擎/python时,zip导入的模块导入会在内存中缓存多长时间,有没有办法将它们保存在内存中?
【发布时间】:2009-08-05 14:58:29
【问题描述】:

我最近上传了一个使用 django appengine 补丁的应用程序,目前有一个每两分钟运行一次的 cron 作业。每次调用 worker url 都会消耗相当多的资源

/worker_url  200 7633ms 34275cpu_ms 28116api_ms

这是因为在每次调用时它都会对所有库 django 等进行冷 zipimport。

  • 导入的模块会在内存中保留多长时间?
  • 有没有办法将这些模块保留在内存中,这样即使后续调用不在这些模块保留在内存中的时间范围内,它们仍然不会调用开销?

【问题讨论】:

    标签: python django google-app-engine import


    【解决方案1】:

    应用引擎根据正常的 Python 语义将所有内容保存在内存中,只要它在同一节点的同一进程中处理一个或多个请求;如果以及当它需要这些资源时,该进程就会消失(因此它曾经拥有的内存中没有任何内容),并且可以随时启动新进程(在同一节点或不同节点上)以服务请求(无论其他进程是否在服务其他请求是否仍在运行)。这很像 fast-CGI 模型:您可以在单个请求中确保正常语义,但除了 0 到 N(无上限)之间的任何内容之外,不同的节点可能正在运行您的代码,每个节点都按顺序提供 0 到K(无上限)不同的请求。

    您无法“留在内存中”(对于 zipimported 模块或其他任何东西)。

    为了完整起见,让我提一下 memcache,它是对应用程序引擎运行时的显式提示/请求,以将某些内容保存在一种特殊形式的内存中,这是一个在运行您的代码的所有进程之间共享的分布式哈希表——虽然这很难不可能用于导入的模块(您需要非常复杂的导入钩子),我建议不要开发此类钩子所需的努力,因为即使存在这样的明确提示,应用程序引擎运行时仍然可以随时选择弹出任何你的东西'无论如何,我都藏在缓存中了。

    而是——我不知道为什么一个 cron 工作特别需要所有的 django,也不知道为什么你要压缩它而不是仅仅使用应用程序引擎现在附带的 1.0.2,每个 the docs - - 详细说明?这可能是您优化的有用问题。

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      相关资源
      最近更新 更多