Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django每次请求占用更多内存_Python_Django_Amazon Elastic Beanstalk - Fatal编程技术网

Python Django每次请求占用更多内存

Python Django每次请求占用更多内存,python,django,amazon-elastic-beanstalk,Python,Django,Amazon Elastic Beanstalk,我的Django应用程序的许多视图使用一个大模型(900Mb)来计算它们的输出。我想加载此模型一次,并与所有视图共享它。我的方法是在views.py中加载模型,然后将模型用作全局变量 with open('big_model.pkl','rb') as f: model = pickle.load(f) def view1(request): out = model.compute(request) ... def view2(request): out = model.co

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

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 beanstalk上部署了Django应用程序。如果我在运行我的应用程序的实例上运行
top
,我会在1次请求后看到以下内容:

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内存被占用

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 

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

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