这是来自龙卷风python框架的官方博客示例应用程序的代码。 有一个问题令我感到困惑:在这个应用程序中,MysqlDB连接被初始化为gloal var ,但是如果高频请求到达,并且连接中断,那么整个应用程序都会关闭?为什么不在每个请求处理程序中初始化一个新连接?这是更好的解决方案吗?
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", HomeHandler),
(r"/archive", ArchiveHandler),
(r"/feed", FeedHandler),
(r"/entry/([^/]+)", EntryHandler),
(r"/compose", ComposeHandler),
(r"/auth/login", AuthLoginHandler),
(r"/auth/logout", AuthLogoutHandler),
]
settings = dict(
blog_title=u"Tornado Blog",
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
ui_modules={"Entry": EntryModule},
xsrf_cookies=True,
cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
login_url="/auth/login",
debug=True,
)
tornado.web.Application.__init__(self, handlers, **settings)
# Have one global connection to the blog DB across all handlers
self.db = torndb.Connection(
host=options.mysql_host, database=options.mysql_database,
user=options.mysql_user, password=options.mysql_password)
答案 0 :(得分:1)
整个应用程序的单个MySQL连接是正确的设计。如果出现网络错误,一个请求将获得异常,但MySQL连接将重新连接以进行下一个请求,您的应用程序将恢复。内置的连接池允许你的应用程序有几个连接到MySQL的套接字,以便一次等待几个MySQL操作。
如果在每个请求处理程序中创建一个新的MySQL连接,则会为每个HTTP请求设置为MySQL设置TCP套接字的成本,以及几次登录MySQL的网络往返。你的表现会更糟,更糟糕。如果你测量它,我希望如果你在每个请求处理程序中创建一个新的MySQL连接,你会发现你的请求延迟会很糟糕。