2009-08-21 8 views
4

Kontext: Stellen Sie sich vor, dass Sie einen Standard CherryPy hallo Wort App haben:Wie führe ich eine asynchrone Nachbearbeitung in CherryPy aus?

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

und Sie möchten etwas Nachbearbeitung, dh Aufzeichnung Anforderungsverarbeitung oder melden Sie sich einfach um die Tatsache zu tun, dass wir von genannt wurden spezifische IP. Was Sie tun würden, ist wahrscheinlich:

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

Allerdings wird dies zu Ihrer Anfrage Bearbeitungszeit hinzufügen. (Btw. Und wahrscheinlich werden Sie Dekoratoren verwenden, oder sogar eine ausgeklügeltere Methode, wenn Sie es bei jeder Funktion aufrufen möchten).

Frage: Gibt es eine Möglichkeit, eine globale Threading bewusst Warteschlange zu schaffen (Puffer), zu der jede Anforderung können Nachrichten (Ereignisse) schreiben, die protokolliert werden muss, während einige magische Funktion es und Post-Prozess greifen wird? Würdest du ein Muster für so etwas wissen?

Ich wette, dass CherryPy unterstützt so ähnlich :-)

Vielen Dank im Voraus ...

Antwort

7

Die "globale Thread-aware-Warteschlange" heißt Queue.Queue. Ich habe gerade ein Rezept dafür hinzugefügt http://tools.cherrypy.org/wiki/BackgroundTaskQueue

+0

Sie lesen in meinem Kopf (mein Code) oder was? ;-)) Vielen Dank, es war genau die Art von Lösung, nach der ich gesucht habe. – stic

+0

Vielen Dank für die Rettung von zwei Arbeitstagen! – xApple

2

Da ich nach diesem suchte und es jetzt veraltet ist, fand ich es nützlich, die richtige (2012ish) Antwort bereitzustellen. fügen Sie diese einfach am Anfang der Funktion, die Ihre URL behandelt:

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

Es gibt mehr Infos auf Haken in der Dokumentation ist, aber es ist nicht ganz klar zu mir.

Verwandte Themen