Flask - socket.error:[Errno 10053]已建立的连接已被主机中的软件中止

时间:2016-10-25 18:21:50

标签: python sockets flask

根据要求(error: [Errno 10053])重新打开此问题,提供最小的可测试示例:

import time
from flask import Flask, render_template
app = Flask(__name__, static_folder='static', template_folder='templates')

@app.route('/')
def main():
    return render_template('test.html')

@app.route('/test')
def test():
    print "Sleeping. Hit Stop button in browser now"
    time.sleep(10)
    print "Woke up. You should see a stack trace from the problematic exception below."
    return render_template('test.html')

if __name__ == '__main__':
    app.run()

HTML:

<html>
<body>
<a href="/test">test</a>
</body>
</html>

指南: 运行应用程序,导航到localhost:port,单击链接,然后单击浏览器中的“停止”按钮。一旦睡眠结束,你应该看到异常。 睡眠是模拟服务器上发生的任何类型活动所必需的。它可能只是几秒钟:如果用户设法离开页面 - Flask将崩溃。

  

socket.error:[Errno 10053]已建立的连接已中止   主机中的软件

为什么服务器停止为应用程序提供服务?我可以将哪些其他服务器用于我的Flask应用程序以避免这种情况?

1 个答案:

答案 0 :(得分:13)

这是SocketServer模块的Python 2实现的一个问题,它不存在于Python 3中(服务器继续提供服务)。

您有3个选择:

  • 不要将内置服务器用于生产系统(毕竟它是开发服务器)。使用适当的WSGI服务器,例如gunicornuWSGI
  • 使用app.run(threaded=True)启用线程模式;线程死了,但是为将来的请求创建了一个新线程,
  • 升级到Python 3。