当前位置: 首页 > 工具软件 > django-mysql > 使用案例 >

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

卫招
2023-12-01

定时任务间隔超过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')
 类似资料: