2015-04-07 6 views
2

У меня есть приложение, написанное с использованием веб-рамки Pyramid. Но мне нужна асинхронная функциональность для WebSockets. Это функциональность, реализованная в Tornado. И я пытаюсь использовать пирамиды с Tornado, как это:Как использовать пирамиду с торнадо

app = tornado.web.Application([ 
    (r'/', IndexHandler), 
]) 

def build_tornado_app(): 
    app.listen(6544) 
    tornado.ioloop.IOLoop.instance().start() 

# This function returns a Pyramid WSGI application 
def main(global_config, **settings): 
    build_tornado_app() 
    # ... config routes, database session etc. 
    config.scan() 
    return config.make_wsgi_app() 

К сожалению, запускаемая Tornado (с помощью функции запуска()) блокируют цепь исполнения.

Могу ли я запустить приложение Tornado, не блокируя цепочку выполнения пирамиды?

ответ

2

Чтобы использовать асинхронные функции Tornado (включая веб-порты), вы должны использовать HTTPServer Tornado вместо запуска в контейнере WSGI. Затем вы можете запустить Pyramid внутри Tornado, используя tornado.web.WSGIContainer, полностью заменяя ваш текущий контейнер WSGI.

Однако WSGIContainer Tornado является однопоточным, что не является хорошим выбором для большинства приложений, построенных с использованием инфраструктуры WSGI. Если у вас нет необходимости запускать Pyramid и Tornado в том же процессе, я рекомендую сохранить их отдельно, используя процесс веб-рассылки pure-Tornado вместе с вашим приложением Pyramid.

+0

После расследования я также думаю, что запуск Pyramid и Tornado в один процесс - плохая идея. – karavanjo

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