当使用appengine/python时,zipimported模块导入在内存中保留多长时间?有没有办法将它们保留在内存中?

2024-10-02 10:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近上传了一个应用程序,它使用django appengine补丁,目前有一个cron作业,每两分钟运行一次。每次调用workerurl时,它都会消耗大量资源

/worker_url  200 7633ms 34275cpu_ms 28116api_ms

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

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

Tags: 模块django内存应用程序url作业资源cron
1条回答
网友
1楼 · 发布于 2024-10-02 10:24:01

appengine根据正常的Python语义将所有内容都保存在内存中,只要它在同一节点的同一进程中为一个或多个请求提供服务;如果需要这些资源,进程就会消失(因此没有任何东西会保留在内存中,而它以前拥有的),并且新的进程可以随时启动(在同一节点或不同节点上),以服务于请求(无论服务于其他请求的其他进程是否仍在运行)。这与fast CGI模型非常相似:您可以确保单个请求中的正常语义,但除了0到N(无上限)之间的任何内容之外,不同的节点可能正在运行您的代码,每个节点依次为0到K(无上限)之间的任何不同请求提供服务。你知道吗

没有什么办法可以“留在内存中”(对于zipimported模块或其他任何东西)。你知道吗

为了完整起见,让我提到memcache,它是对appengine运行时的一个显式提示/请求,用于将某些内容保存在特殊形式的内存中,一个分布式哈希表,它在运行代码的所有进程之间共享,对于导入的模块很难使用,但并非不可能(您需要非常复杂的导入钩子),我建议不要开发这种钩子,因为即使存在这种显式提示,app engine运行时仍然可以随时使用不管怎样,选择弹出你藏在缓存里的任何东西。你知道吗

更确切地说,我不知道为什么一个cron作业特别需要所有的django,也不知道为什么你要zipimporting它,而不是仅仅使用appengine自带的1.0.2,你想详细说明一下吗?这对您优化可能是一个有用的问题。你知道吗

相关问题 更多 >

    热门问题