django 安装 read time out_django.db.utils.InterfaceError: (0, '')解决办法。

使用django_apscheduler执行定时任务,由于wait_timeout设置问题或其他原因导致到达指定执行时间时,任务未执行,django_apscheduler_djangojob表中,任务数据仍然存在,同时报错

ERROR

此错误信息无法被listener获取到,个人认为问题出现在mysql断掉了与django的连接,而django_apscheduler的调度器仍然使用这条连接访问数据库导致出错。

解决办法:

1.修改mysql中wait_timeout数值,具体修改办法百度可查,但是修改waittimeout并不能从根本上解决这个问题,在某种特定情况时,mysql同样会主动断掉连接,django_apscheduler有可能会出现上述问题。

2.修改django_apscheduler内部代码, 查找到以下文件:

46289d33c28f094cec198990f1e7fce7.png
class DjangoJobManager(models.Manager):
    """
    This manager pings database each request after 30s IDLE to prevent MysqlGoneAway error
    """
    _last_ping = 0
    _ping_interval = 30

    def get_queryset(self):
        self.__ping()
        return super(DjangoJobManager, self).get_queryset()

    def __ping(self):
        # if time.time() - self._last_ping < self._ping_interval:
        #      return
        try:
            with connection.cursor() as c:
                c.execute("SELECT 1")
        except Exception as e:
            self.__reconnect()

        self._last_ping = time.time()

注释_ping函数中 时间判断逻辑,这段代码目的是每隔30秒判断一次数据库连接是否正常,不正常则关闭重连,注释后有可能会影响一定效率(未测试),使django_apscheduler每次请求数据库之前都判断一次连接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值