2016-12-27 6 views
1

когда я делаю использование веб-приложения torado + flask, я отвечаю на вопрос, что когда я отправляю запрос в свое приложение, он ничего не отвечает мне и его всегда ждет. Когда я нахожу проблему, я обнаружил, что есть много 'close wait' на моем сервере (linux). Я не знаю, как решить этот вопрос, может кто-нибудь мне помочь? здесь код я использую смерч:торнадо колбу закрыть wait

#coding=utf-8 
from tornado.wsgi import WSGIContainer 
from tornado.httpserver import HTTPServer`enter code here` 
from tornado.ioloop import IOLoop 
from service import app #app is a flask in another file:app=Flask(__name__) 
from config import SERVER_CONF 
from appLog import logging 


def startService(): 
    logging.info('start web,http://%s:%s/test'%(SERVER_CONF['IP'],SERVER_CONF['PORT'])) 
    try: 
     http_server=HTTPServer(WSGIContainer(app)) 
     http_server.listen(SERVER_CONF['PORT'],address=SERVER_CONF['IP']) 
     IOLoop.instance().start() 
    except Exception as e: 
     logging.error('start failed:') 
     logging.error(e) 


if __name__=='__main__': 
    startService() 

ответ

0

Я понимаю, что вам нужно использовать FallbackHandler, как описано в this answer.

Это, как говорится, я бы настоятельно рекомендовал использовать этот подход - Tornado включает в себя отличный microframework of its own, который намного лучше интегрируется с сервером и во многом превосходит Flask. Если использовать флажок, я бы рекомендовал изучить различные способы обеспечения параллелизма (например, несколько экземпляров за балансировщиком nginx) или даже взглянуть на Sanic, который является асинхронным и очень похож на Flask.

+1

'FallbackHandler' не требуется, если вы не хотите * комбинировать * приложение wsgi/flask с родным торнадо. Но вы правы, что работающая колба в Tornado WSGIContainer - это, как правило, плохая идея: http://www.tornadoweb.org/en/stable/wsgi.html#tornado.wsgi.WSGIContainer. Если вы используете флягу, вы, вероятно, должны использовать gunicorn или uwsgi вместо http-сервера торнадо. –

+0

Абсолютно - в своем ответе я только предположил, что вы должны обернуть Flask в контейнер WSGI для производства. –

+0

Спасибо всем вашим ответам. Я буду рассматривать использование пушки, вместо http-сервера торнадо. Спасибо! – elina