【问题标题】:tornado flask close wait龙卷风烧瓶关闭等待
【发布时间】:2016-12-27 11:06:46
【问题描述】:

当我使用 torado+flask 制作 Web 应用程序时,我遇到一个问题,即当我向我的应用程序发送请求时,它对我没有任何响应,并且一直在等待。 当我发现问题时,我发现我的服务器机器(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()

【问题讨论】:

    标签: python flask tornado


    【解决方案1】:

    我的理解是你需要使用FallbackHandler,如this answer中所述。

    话虽如此,我强烈建议不要使用这种方法——Tornado 包含一个出色的microframework of its own,它与服务器的集成要好得多,并且在许多方面都优于 Flask。如果使用 Flask 很重要,我建议探索不同的方法来确保并发性(例如,在 nginx 负载均衡器后面使用多个实例),或者甚至看看 Sanic,它既是异步的,又与 Flask 非常相似。

    【讨论】:

    • FallbackHandler 是不必要的,除非您想将 wsgi/flask 应用程序与原生 tornado 应用程序结合。但是你说得对,在 Tornado WSGIContainer 中运行烧瓶通常是个坏主意:tornadoweb.org/en/stable/wsgi.html#tornado.wsgi.WSGIContainer。如果您使用的是烧瓶,您可能应该使用 gunicorn 或 uwsgi 而不是 tornado 的 http 服务器。
    • 当然——在我的回答中,我只是假设您应该将 Flask 包装在 WSGI 容器中进行生产。
    • 感谢您的所有回答。我会考虑使用 gunicorn 代替 Tornado 的 http 服务器。谢谢!
    猜你喜欢
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    相关资源
    最近更新 更多