在Application / Handler和Handler外部的其他位置(如测试文件或模型文件)共享connection_pool的更好方法是什么?
在main.py
中,我在Application中定义了一个db_pool,我可以在任何RequestHandler中使用它,如果我想在RequestHandler之外使用它怎么办?
什么是更好的做法?
main.py
import tornado.web
class Application(tornado.web.Application):
"""
自定义的Application
"""
def __init__(self):
# I have a db_pool here
init_dict = {
'db_pool': PooledDB.PooledDB(MySQLdb, **db_server)
}
super(Application, self).__init__(
[(r'/', IndexHandler, init_dict)],
**settings)
test.py
from main import Application
# I want to get db_pool here
dao.py
def get_config(user):
# I want to get db_pool in main
db = db_pool.connection()
return
你能帮帮我吗?
答案 0 :(得分:1)
我会将连接池存储在Application
类中,而不是将其传递给Handlers
。然后,您可以通过在GET / POST方法中调用self.application
来访问处理程序中的应用程序。
class Application(tornado.web.Application):
def __init__(self):
self.db = PooledDB.PooledDB(MySQLdb, **db_server)
super(Application, self).__init__([(r'/', IndexHandler)], **settings)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.application.db.<put a valid method here>()