0

私はcherrypyでzodbを使用しています。jinja2 テンプレートにデータを渡しています。テンプレート レンダリングを返す前に、zodb 接続を閉じたいと思います。

データがzodbデータであるため、レンダリング時にテンプレートが接続を必要とするため、できません。

これはエラーになります...

zconn.close() #zconn.close closes the conn,db, and storage
return template.render(args....)

すでに戻ってきた後に zodb conn を閉じるにはどうすればよいですか? 常にデータベース接続を持つように定義できる「リクエスト前」および「リクエスト後」関数はありますか? チェリーピーのドキュメントには、「公開された関数の先頭で明示的に実行し、戻る前に閉じる」という点を除けば、データベース接続に関する明示的なものはあまりありません。

それとも、言うのが標準的な慣行ですか...

page = template.render(args...)
zconn.close()
return page
4

1 に答える 1

1

はい、リクエストが完了したときにのみ接続を閉じるのが標準的な方法です。

可能な限り最新の瞬間まで終了を延期します。コンテキストマネージャーを使用して、クローズを処理できます。

from contextlib import contextmanager

@contextmanager
def zodbconn(db):
    conn = db.open()
    yield conn.root()
    conn.close()

次に使用します:

with zodbconn(db) as zconn:
    return template.render(args....)

ステートメントが処理された、接続は自動的に閉じられます。return

于 2013-09-03T09:37:46.337 に答える