python热更新模型/数据等方法

flask中热更新数据模型

背景:

项目中使用flask结合机器学习,想定时更新模型,python中没有类似java静态变量一样。后来使用单独定义一个模块以全局变量来实现。

具体思路和代码

大体需求是训练集存放在数据库,每天增长,希望每天定时去训练数据集,flask接口去提供服务时模型数据总是以最新的模型提前加载缓存,以提高服务响应时间。
百度提供的思路大体不是很明白,要不就是不适用,看了一个回答是单独使用一个模块去提供全局变量,感觉可行,所以试了试。
思路:
单独写一个模块,写一个初始方法给默认集,并提供get,set方法。
flask启动定时任务去更新模型后重新set即可。

具体实现:

全局变量模块
gl_modle.py:

import pickle,os,sys
from LAC import LAC

global gl__lac
path = os.path.abspath(os.curdir)
global _gl_init
def _readbunchobj(path):
    with open(path, "rb") as file_obj:
        bunch = pickle.load(file_obj)
        return bunch

def _init():#初始化
    global _gl_init
    _gl_init = {}
    _gl_init["init"] = #模型一的默认集
    _gl_init["lac"] = #模型二的默认集
def set_value(key,value):
    _gl_init[key] = value


def get_value(key,defValue=None):
    try:
        return _gl_init[key]
    except KeyError:
        return defValue

在其他模块调用时:

import gl_modle as gl
#初始化
gl._init()
#想获取值
gl.get_value("lac")
#想变更值
gl.set_value("init",xxxx)
#在flask中的使用
app.py
from flask import *
import  gl_modle as gl

app = Flask(__name__)
gl._init()
@app.route('/test/',methods=["POST"])
def test():
    return “hellow”
#定时任务
class SchedulerConfig(object):
    JOBS = [
        {
            'id': 'traindata', # 任务id
            'func': 'train:trainData', # 任务执行程序
            'args': (gl,), # 执行程序参数
            'trigger': 'interval', # 任务执行类型,定时器
            'seconds': 30, # 任务执行时间,单位秒
        }
    ]

app.config.from_object(SchedulerConfig())

if __name__ == '__main__':

    global train_tfidf_path
    scheduler = APScheduler()  # 实例化APScheduler
    scheduler.init_app(app)  # 把任务列表载入实例flask
    scheduler.start()  # 启动任务计划
    app.run(host="0.0.0.0")
#定时训练的模块
train.py
def trainData(gl):

	#此处为训练的具体逻辑和获取训练集
	gl.set_value("init",xxx)

思路仅供参考,有更好的方法希望大佬们能够提点一下。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值