CherryPyアプリケーションのデバッグメソッドを書いていました。問題のコードは(非常に)基本的にこれと同等でした:
import cherrypy
class Page:
def index(self):
try:
self.body += 'okay'
except AttributeError:
self.body = 'okay'
return self.body
index.exposed = True
cherrypy.quickstart(Page(), config='root.conf')
リクエストごとに、self.bodyの出力が大きくなっていることに驚きました。あるクライアントから、次に同時に開いている別のクライアントからページにアクセスし、両方のブラウザーを更新すると、出力は増え続ける「OK」の文字列でした。私のデバッグ方法では、ユーザー固有の情報(つまり、セッションデータ)も記録していましたが、それも両方のユーザーの出力に表示されました。
これは、Pythonモジュールがリクエストごとに再実行されるのではなく、作業メモリーにロードされるためだと思います。
私の質問はこれです:それはどのように機能しますか?self.debugはリクエスト間で保持されますが、cherrypy.sessionとcherrypy.responseは保持されないのはどうしてですか?
また、現在のリクエストにのみ使用されるオブジェクト属性を設定する方法はありますか?リクエストごとにself.bodyを上書きできることは知っていますが、少しアドホックなようです。CherryPyでそれを行うための標準的な方法または組み込みの方法はありますか?
(2番目の質問はCherryPyキャッシングはどのように機能しますか?に移動しました)