Django-apscheduler间隔时间过长,mysql中止已建立连接问题

定时任务间隔超过8小时,超过八小时没有数据交互数据库会判断服务器中止连接。然后定时任务查询报错default(2006,软件中止了一个已建立的连接),后续数据查询会返回default,(0,")报错问题!(这个问题是在获取定时任务信息的时候出的问题,网上好多都是在说定时任务中的任务连接问题,任务都获取不到,更不用说执行任务了。)
1、windows环境,django2.2.5+apscheduler+django-apscheduler,使用的pymysql库连接mysql.
2、定时任务间隔大于8小时,数据库设置是wait_time正常的8小时.
在网上找了好多方法,包括:1、设置add_jobstore的engin_options={‘pool_pre_ping’: True, ‘pool_recycle’: 25200}参数(七小时检查一次连接)——无效。2、django.db.connection.connection.ping()检查数据连接方法——无效(因为这个数据连接的方法是做在外部的,定时任务启动时初始化才会调用到这个方法,启动之后在查询定时任务时这个方法将不再调用,所以无效)3、django.db.close_old_connections()——和方法二同样的道理,无效。(但是2、3这个对定时任务的任务中的数据连接有效)
3、无奈之举:做了一个一直存在的定时任务,每隔6小时执行一次,使数据库连接保持活跃。(不过这个方法很明显是一个浪费资源,并且不合适的做法)
4、(一个似乎可行的办法,通过初步测试可以)扒拉源码发现,定时任务的查询会调用DjangoJobStore的_get_jobs方法,重写DjangoJobStore类,继承重写该方法。重写的方法中,使用close_old_connections()关闭过期的连接,之后再执行查询。

s=apscheduler.BackgroundScheduler()
 s.add_jobstore(自定义类,'default')
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值