WSGI の学習。次のような WSGI アプリを作成しようとしています。
- 一連のリクエスト全体で状態をキャッシュします
- 一連のリクエストに対して単一の自動コミットデータベース接続を開きます
- 各リクエストを処理するカーソルを作成します
そう、
class RequestHandler:
def __init__(self, app, environ, start_response, cursor):
self.start_response = start_response
self.cursor = cursor
def __iter__(self):
self.start_response('200 OK', [('Content-type','text/plain')])
yield do_stuff_with(self.cursor)
def close(self):
self.cursor.close()
class Application:
def __init__(self):
self.connection = psycopg2.connect(database="site", user="www-data")
self.connection.set_isolation_level(0)
def __call__(self, environ, start_response):
return RequestHandler( self, environ, start_response, self.connection.cursor() )
RequestHandler
そのため、のclose()
メソッドでリクエストごとの状態をクリーンアップできます。サーバーがアプリケーション全体で完了したと判断したときに、共有状態をクリーンアップしたり、データベース接続を閉じたりする正しい方法は何ですか? WSGI 仕様は、リクエストごとに同等の保証を提供していないようですclose()
- 何か不足していますか? それとも、これが根本的に誤ったアプローチである理由がありますか?