Pyramidアプリケーションに非常に大きな問題があることを発見しました。mongoスキャフォールドは、データベース接続の処理にもイベントハンドラーを使用する必要があることを示しています。アイデアは、新しいリクエストが着信したときにデータベースに接続し、ページが切断されたときに接続することです。だからこれは私がしたことです__init.py__
def connectDatabase(event):
mongo = MongoDB()
con = mongo.connectDatabase()
db = con[Cfg_MongoDB_Database]
event.request.con = con
event.request.db = db
redis = Redis()
con = redis.connectDatabase()
event.request.redis = con
log.debug('newrequest')
def closeConnection(event):
mongo = MongoDB()
mongo.closeConnection(event.request.con)
log.debug('newresponse')
def main(global_config, **settings):
config = Configurator(settings=settings, root_factory=Dashboard)
authentication = AuthTktAuthenticationPolicy(Cfg_Auth_Key, hashalg='sha512',\
include_ip=False, timeout=3600*24*7, max_age=3600*24*7, reissue_time=3600)
authorization = ACLAuthorizationPolicy()
config.set_authentication_policy(authentication)
config.set_authorization_policy(authorization)
config.add_static_view('includes', 'includes', cache_max_age=3600)
config.add_renderer(".html", "pyramid.mako_templating.renderer_factory")
config.add_route('dash', '/')
config.add_subscriber(connectDatabase, NewRequest)
config.add_subscriber(closeConnection, NewResponse)
log.debug('main')
config.scan()
return config.make_wsgi_app()
ただし、データベースに接続しているメソッドにロガーを配置し、メソッドが10回以上呼び出されていること、および100回以上キャッシュを無効にした場合にそのメソッドが呼び出されていることを発見しましたadd_static_view
。これは、css、image、jsごとに、新しい接続が確立されることを意味します。これは大きなオーバーヘッドです!!! サイトはデータベースに100回接続するのに300msかかります!
/Users/jan/Documents/Test2/test2/data.py changed; reloading...
-------------------- Restarting --------------------
2013-02-01 18:32:48,351 DEBUG [test2.tools][MainThread] main
Starting server in PID 12374.
serving on http://127.0.0.1:6543
2013-02-01 18:34:14,451 DEBUG [test2.tools][Dummy-2] newrequest
2013-02-01 18:34:14,582 DEBUG [test2.tools][Dummy-2] newresponse
2013-02-01 18:34:14,952 DEBUG [test2.tools][Dummy-3] newrequest
2013-02-01 18:34:14,953 DEBUG [test2.tools][Dummy-3] newresponse
2013-02-01 18:34:17,459 DEBUG [test2.tools][Dummy-4] newrequest
2013-02-01 18:34:17,474 DEBUG [test2.tools][Dummy-4] newresponse
2013-02-01 18:34:17,482 DEBUG [test2.tools][Dummy-5] newrequest
2013-02-01 18:34:17,497 DEBUG [test2.tools][Dummy-5] newresponse
2013-02-01 18:34:19,158 DEBUG [test2.tools][Dummy-2] newrequest
2013-02-01 18:34:19,159 DEBUG [test2.tools][Dummy-2] newresponse
したがって、これまでの解決策は、代わりに接続をモデルに移動することです。しかし、いつ接続を閉じることができるかよりも、どうすればわかりますか?誰かが私の問題に対してより良い、よりエレガントな解決策を持っていますか?