2015-10-23 4 views
0

Я использую cherrypy для создания веб-службы. Я наткнулся на плагин BackgroundTaskQueue, и я хочу использовать его для обработки конкретных трудоемких операций в отдельном потоке.Совместное использование объекта BackgroundTaskQueue объекта CherryPy между обработчиками запросов

В документации говорится использование должно быть примерно следующее:

import cherrypy 
from complicated_logging import log 

bgtask = BackgroundTaskQueue(cherrypy.engine) 
bgtask.subscribe() 

class Root(object): 

    def index(self): 
     bgtask.put(log, "index was called", ip=cherrypy.request.remote.ip)) 
     return "Hello, world!" 
    index.exposed = True 

Но, ИМХО, используя объект bgtask, как это не очень элегантно. Я бы хотел, чтобы обработчики из других модулей python использовали этот объект.

Есть ли способ подписаться на этот плагин один раз, а затем «поделиться» объектом bgtask среди других обработчиков (например, сохранить его в cherrypy.request)?

Как это делается? Требуется ли вам написать вишневый инструмент?

ответ

0

Место

queue = BackgroundTaskQueue(cherrypy.engine) 

в отдельном файле с именем, например, tasks.py. Таким образом вы создаете модуль задач. Теперь вы можете «задачи импорта» в других модулях и очереди это единственный экземпляр

Например, в файле с именем test.py:

import tasks 
def test(): print('works!') 
tasks.queue.put(log, test) 
Смежные вопросы