falsk实现结巴分词自定义词典定时更新及加载

9 篇文章 0 订阅

问题

使用flask配合结巴库做了一个分词接口,做定时任务每天从数据库拉取自定义词汇作为其自定义词典,使用uwsgi部署.
问题点是在uwsgi运行时,即使从数据库拉取了数据,词典也不会加载到内存中,也就是新的词汇不生效

解决办法

办法一

在flask再添加一个定时任务,当词典拉取后就调用词典加载程序,将词典加载到内存中 --不可行

原因:因为在uwsgi运行时,之前的词典已经加载到内存中,在次加载词典不生效

方法二

uwsgi中有一个配置py-autoreload=1,当有py文件改变时会自动重启uwsgi服务,正好符合我们的要求,
当词典定时更新后在一个py文件中写入一个字符串,每次写入不一样,uwsgi就会监测到py文件有改变,进而重启uwsgi服务,重新加载更新后的词典.

我是每次写入当前时间戳.

缺点:需要uwsgi重启,在线上要考虑重启时间,也就是词典定时拉取时间,我将其定时在凌晨3.

以下是 uwsgi.ini配置

[uwsgi]
master = true
process = %(%k*2)
threads = %(%k*20)
chdir = %v
http = 0.0.0.0:5000
disable-logging = true
wsgi-file = %v/tokenizer_main.py
callable = app
enable-threads = true
mule = %v/myscheduler.py
buffer-size = 65536
py-autoreload = 1

下面是scheduler代码

from apscheduler.schedulers.background import BackgroundScheduler
from dictionary_management import update_user_dict


scheduler = BackgroundScheduler(timezone="Asia/Shanghai")

# 定时更新用户词典
# scheduler.add_job(update_user_dict, 'interval', minutes=10)
scheduler.add_job(update_user_dict, 'cron', hour=3,minute=10)

scheduler.start()

try:
    import uwsgi

    while True:
        sig = uwsgi.signal_wait()
        (sig)
except Exception as err:
    pass


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值