0

在应用程序/处理程序和处理程序之外的其他地方(如测试文件或模型文件)共享连接池的更好方法是什么?

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

你可以帮帮我吗?

4

1 回答 1

1

我会将连接池存储在Application类中,而不是将其传递给您的Handlers. 然后,您可以通过self.application在 GET/POST 方法中调用来访问处理程序中的应用程序。

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>()
于 2013-11-21T18:15:53.140 回答