我想将6GB文件加载到内存中,这样如果我收到请求,我就不必再加载它了。所以我能够通过添加简单的装饰器@ app.before_first_request在烧瓶服务器上实现这一点,但是当我使用相同的应用程序集成apache时,它会在每次请求之前调用此函数。
我的代码如下:
route.py
@app.before_first_request
def initialize():
global SRC_PATH, MODEL
path = SRC_PATH
print("Loading Core files from {}".format(path))
MODEL = Model.load(path+utils.MODEL_EXT)
print("Loaded all files in memory")
@app.route("/test",methods=['POST'])
def search_index():
# MyCode:
return "some response"
我的apache配置是:
<VirtualHost *>
WSGIDaemonProcess yourapplication user=ubuntu group=www-data
WSGIScriptAlias / /xxx/app.wsgi
<Directory /xxx/>
WSGIProcessGroup yourapplication
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
<VirtualHost *>
和app.wsgi
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, "/xxx/")
from route import app as application
现在在我的apache登录每个请求它加载核心文件: apache.log
[Sun Oct 29 06:21:14.691075 2017] [wsgi:error] [pid 22906:tid 140496053819136] Loading Core files from /xxx
[Sun Oct 29 06:21:20.919143 2017] [wsgi:error] [pid 22906:tid 140496053819136] Loaded all files in memory
虽然我希望在第一次请求之前或甚至在第一次请求之前加载它并将其永久保存到内存中吗?
答案 0 :(得分:1)
我的问题是在代码中我使用多处理来加载文件。
因此,我没有进行多进程,而是将其更改为多线程。
以前使用多进程的代码如下:
from multiprocessing import Pool
我已将其更新为
from multiprocessing.dummy import Pool
其中multiprocessing.dummy
是基于线程而非基于进程的。