0

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()- 何か不足していますか? それとも、これが根本的に誤ったアプローチである理由がありますか?

4

1 に答える 1

1

メソッドを使用できます__del__

def __del__(self):
    return self.close()
于 2013-09-15T15:11:19.150 に答える