2016-12-27 61 views
1

当我做一个web应用程序使用torado + flask,我遇到了一个问题,当我向我的应用程序发送请求时,它对我没有任何回应,它总是等待。 当我发现问题时,我发现在我的服务器机器(linux)中有很多'close 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描述。

这就是说,我强烈建议不要使用这种方法 - 龙卷风包括一个优秀的microframework of its own,它与服务器集成得更好,在很多方面都优于Flask。如果使用Flask非常重要,我建议您探索一种确保并发性的不同方法(例如,nginx负载均衡器背后的多个实例),或者看看Sanic,它既是异步的,又非常类似于Flask。

+1

除非您想将* wsgi/flask应用程序与原生龙卷风应用程序*组合起来,否则'FallbackHandler'是不必要的。但你说得对,在Tornado WSGIContainer中运行烧瓶通常是一个坏主意:http://www.tornadoweb.org/en/stable/wsgi.html#tornado.wsgi.WSGIContainer。如果你使用烧瓶,你应该使用gunicorn或uwsgi而不是龙卷风的http服务器。 –

+0

绝对 - 在我的回答中,我只是假设你应该将Flask包装在WSGI容器中进行生产。 –

+0

谢谢你所有的答案。我会考虑使用gunicorn而不是龙卷风的http服务器。谢谢! – elina