Python Flask未在Centos7中释放内存

Python Flask未在Centos7中释放内存,python,flask,memory-leaks,centos7,joblib,Python,Flask,Memory Leaks,Centos7,Joblib,我创建了一个简单的flask方法,该方法使用joblib从磁盘加载和卸载字典对象(包含LogisticRegression和tfidfvectorier使用sklearn)。以下是函数: def load_unload_model(): a_model_path = 'model.bin' print('Memory before loading model:', get_memory_usage()) model_obj = joblib.load(a_model_pa

我创建了一个简单的
flask
方法,该方法使用
joblib
从磁盘加载和卸载字典对象(包含
LogisticRegression
tfidfvectorier
使用
sklearn
)。以下是函数:

def load_unload_model():
    a_model_path = 'model.bin'
    print('Memory before loading model:', get_memory_usage())
    model_obj = joblib.load(a_model_path)
    print('Memory after loading model:', get_memory_usage())
    del model_obj
    gc.collect()
    print('Memory after unloading model:', get_memory_usage())
当我使用
Flask
方法迭代调用此函数时,进程的内存会随着每个请求不断增加。如果我从
Main
运行相同的函数,则加载前和卸载后的内存模型保持不变。Windows上不会出现此问题

以下是完整的代码:-

import os, gc, psutil, sys
from flask import Flask
import joblib
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression

app = Flask(__name__)
global_request_counter = 0


def get_memory_usage():
    a_process = psutil.Process(os.getpid())
    return str(round(a_process.memory_info().rss/(1000*1000))) + 'MB'

def load_unload_model():
    a_model_path = 'model.bin'
    a_model_path2 = 'model2.bin'
    print('Memory before loading model:', get_memory_usage())
    model_obj = joblib.load(a_model_path)
    model_obj2 = joblib.load(a_model_path2)
    print('Memory after loading model:', get_memory_usage())
    del model_obj
    del model_obj2
    gc.collect()
    print('Memory after unloading model:', get_memory_usage())


@app.route('/prediction_service/load_model', methods=['GET'])
def load_model_api():
    global global_request_counter
    print('Request:', global_request_counter+1, 'Started')
    load_unload_model()
    print('Request:', global_request_counter+1, 'Ended')
    print('-'*50)
    global_request_counter += 1
    return "Execution Successful"


if __name__ == "__main__":
    run_flask = 1

    if run_flask == 1:
        app.run(host="0.0.0.0", port="8060")
    else:
        for i in range(15):
            print('Iteration:', i+1, 'Started')
            load_unload_model()
            print('Iteration:', i+1, 'Completed')
            print('-'*50)
以下是Centos7上使用烧瓶的输出:

请求:1已启动
加载前内存型号:71MB
加载后的内存型号:134MB
卸载后的内存型号:83MB
请求:1结束

请求:2个已启动
加载前内存型号:84MB
加载后的内存型号:152MB
卸载后的内存型号:87MB
请求:2个结束

请求:3个已启动
加载前内存型号:85MB
加载后的内存型号:152MB
卸载后的内存型号:89MB
请求:3个结束

..
..
..

请求:14个已启动
加载前内存型号:94MB
加载后的内存型号:157MB
卸载后的内存型号:102MB
请求:14结束

请求:15个已启动
加载前内存型号:102MB
加载后的内存型号:157MB
卸载后的内存型号:102MB
请求:15结束