首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django在每个请求中占用了更多的内存

Django在每个请求中占用了更多的内存
EN

Stack Overflow用户
提问于 2017-07-12 06:07:42
回答 1查看 630关注 0票数 1

我的Django应用程序的许多视图都使用一个大模型(900 my )来计算它们的输出。我想加载这个模型一次,并与所有视图共享它。我所做的方法是在views.py中加载模型,然后将模型作为全局变量使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open('big_model.pkl','rb') as f:
  model = pickle.load(f)

def view1(request):
  out = model.compute(request)
  ...

def view2(request):
  out = model.compute(request)
  ...

我在AWS豆茎上部署了Django应用程序。如果我在运行我的应用程序的实例上运行top,我会在1请求之后看到以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Mem:   4048016k total,  2807496k used,  1240520k free,     3660k buffers
 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                        
11530 wsgi      20   0 2817m 1.6g  30m S  0.0 41.9   0:04.63 httpd   

在第二个请求之后,出现了另一个进程,占用了1Gb内存。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Mem:   4048016k total,  3941208k used,   106808k free,     2192k buffers
 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                        
11530 wsgi      20   0 2817m 1.6g  29m S  0.0 41.9   0:04.63 httpd                          
11532 wsgi      20   0 2817m 1.6g  29m S  0.0 41.9   0:04.32 httpd 

这在我的本地机器上不会发生。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 07:34:41

此模块级全局状态是进程中的共享状态。在本地使用runserver时,您将有一个具有多个线程的进程。在EB上,您可能有多个独立的进程,每个进程都有自己的副本。您没有控制哪个进程将处理每个传入请求。内存使用量不应随着每个请求而继续增加,而应在每个进程在导入时创建其副本时达到最大值。您可以将您的WSGI服务器的并发性限制为具有多个线程的单个进程(如何将取决于您使用的WSGI服务器)。这将降低您的内存使用量,但也会降低站点的容量/性能。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45060018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文