5

コンテキスト: 標準のCherryPyhellowordアプリがあると想像してください。

   def index(self):
      return "Hello world!"
   index.exposed = True

後処理、つまりリクエスト処理を記録するか、特定のIPから呼び出されたという事実をログに記録したいとします。あなたがすることはおそらく:

def index(self):
   self.RunMyPostProcessing()
   return "Hello world!"
index.exposed = True

ただし、これによりリクエストの処理時間が長くなります。(ところで、すべての関数で呼び出したい場合は、おそらくデコレータ、またはさらに洗練されたメソッドを使用します)。

質問: ログに記録する必要のあるメッセージ(イベント)を各リクエストが書き込むことができるグローバルスレッド対応キュー(バッファー)を作成する方法はありますか?魔法の関数がそれを取得して後処理しますか?そのようなもののパターンを知っていますか?

CherryPyはそのようなものをサポートしているに違いない:-)

前もって感謝します...

4

2 に答える 2

7

「グローバルスレッド対応キュー」はQueue.Queueと呼ばれます。

于 2009-08-21T16:48:03.197 に答える
2

私はこれを探していましたが、今では時代遅れになっているので、正しい(2012年の)答えを提供することが有用であることがわかりました。URLを処理する関数の先頭にこれを追加するだけです:

cherrypy.request.hooks.attach('on_end_request', mycallbackfunction)

ドキュメントにはフックに関する詳細情報がありますが、私にはあまり明確ではありません。

于 2012-11-25T01:14:19.833 に答える