2009-08-21 2 views
4

Контекст: Представьте себе, что у вас есть стандартный CherryPy привет слово приложение:Как выполнить асинхронную пост-обработку в CherryPy?

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

и вы хотели бы сделать некоторые пост-обработки, т.е. обработки запроса записи или просто войти тот факт, что мы были названы из конкретный IP. Что бы вы сделали, вероятно, было бы:

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

Однако, это добавит ваше время обработки запроса. (Кстати, и, вероятно, вы будете использовать декораторы или даже какой-нибудь более сложный метод, если вы хотите называть его для каждой функции).

Вопрос: Есть ли способ создания глобальной поточной осведомленный очереди (буфер), к которому каждый запрос может писать сообщения (события), который нуждается быть авторизованы, в то время как какая-то магия функция будет захватить его и пост-процесс? Вы знаете образец такого?

Держу пари, что CherryPy поддерживает что-то вроде этого :-)

Спасибо заранее ...

ответ

7

«Глобальная очередь с поддержкой потоков» называется Queue.Queue. Я только что добавил рецепт для этого на http://tools.cherrypy.org/wiki/BackgroundTaskQueue

+0

Вы читаете мои мысли (мой код) или что? ;-)) Большое вам спасибо, это было именно то решение, которое я искал. – stic

+0

Благодарим вас за спасение двух дней работы! – xApple

2

Поскольку я искал это, и он теперь устарел, я нашел полезным дать правильный ответ (2012). Просто добавьте это в начале функции, которая обрабатывает свой адрес:

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

Там в более подробная информация на крюках в документации, но это не очень понятно мне.

Смежные вопросы