什么是在龙卷风内的RequestHandler内部和外部RequestHandler之间共享连接池的更好方法

时间:2013-11-12 09:23:18

标签: python global-variables tornado

在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

你能帮帮我吗?

1 个答案:

答案 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>()