首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用预加载技术实现工人间的内存共享

使用预加载技术实现工人间的内存共享
EN

Stack Overflow用户
提问于 2017-07-13 05:11:58
回答 1查看 11.2K关注 0票数 7

我有一个大的模型文件,我使用在我的webservice内置的瓶,然后通过Gunicorn服务。文件夹是结构化的,如下所示:

代码语言:javascript
复制
A.py
Folder_1\
    __init__.py
    B.py

模型在__init__.py中加载并在B.py中使用,入口点是包含@app.routes, etc.A.py

我开始使用A.py--preload选项预加载应用程序和有8工人

我面临着在8个核心上100%的CPU利用率;很明显,请求被卡在应用服务器上,没有被转发到DB。模型是否也被预加载并提供给所有8个工作人员,即它是否在工作进程之间共享?如果不是,我必须在A.py中加载模型,以便为所有工作人员预先加载该模型。

我认为模型是由每个工作过程加载的,而且由于模型很大,工人们都被困在那里了。

编辑1:由于通知我这可能是一个重复的问题,我想澄清的是,我不是在问python如何处理共享对象。我理解使用multiprocessing是可能的。在我的例子中,我与8名工人一起启动烧瓶服务器,使用预加载选项,我的应用程序有8个运行实例。我的问题是,由于代码是在工人被分叉之前预先加载的,所以持枪工人将共享同一个模型对象,或者每个人都有一个单独的副本。

EN

回答 1

Stack Overflow用户

发布于 2017-11-21 12:53:30

我的问题是,由于代码是在工人被分叉之前预先加载的,所以持枪工人将共享同一个模型对象,或者每个人都有一个单独的副本。

这将是一个单独的副本。

预加载只是利用了这样一个事实:当您调用操作系统的fork()调用来创建一个新进程时,操作系统能够在两个进程之间共享未修改的内存部分。通过预加载尽可能多的代码,进程之间共享了更多内存。

这只是一个幕后的操作系统优化:从每个单独的python进程的角度来看,它们都有每个对象的唯一副本。

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

https://stackoverflow.com/questions/45071875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档