发现, tornado的database模块的Connection在很长时间没有请求数据库后,就会出现断开数据库连接
通过tornado定时调用来执行一个语句,来和mysql保持心跳
# -*- coding: utf-8 -*-
from urls import urls
from settings.dbsettings import MYSQL
from tornado.ioloop import PeriodicCallback
from lib.utils import dolog
import tornado.web
import tornado.database
import os
SETTINGS = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
)
class Application(tornado.web.Application):
def __init__(self):
handlers = urls
settings = SETTINGS
tornado.web.Application.__init__(self, handlers, **settings)
self.db = tornado.database.Connection(**MYSQL) # tornado3要改一下, 换成torndb
# 心跳 => 保持和mysql的连接
def ping_db():
t = self.db.query("SELECT now() as time")[0].time
print "ping:", t
pc = PeriodicCallback(ping_db, 1800)
pc.start()
application = Application()
---------
可用try捕获<连接失败异常>然后调用self.db.reconnect来<重连>,然后再查询
这样就省去了定时调用的消耗
***最新修改:还是定时调用的消耗小,try的消耗比较大