0

テストファイルやモデルファイルのように、アプリケーション/ハンドラーとハンドラー外の他の場所の両方で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

私たちを手伝ってくれますか?

4

1 に答える 1

1

Application接続プールをに渡すのではなく、クラス内に保存しますHandlersself.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 に答える