Windows下Flask服务器脚本退出耗时过长问题求助
Flask服务器访问路由后CTRL+C延迟终止的解决办法(Python 3.6.0 + Windows)
嘿,我之前在Windows环境用老版本Python跑Flask开发服务器时,也碰到过一模一样的问题!先给你唠唠为啥会这样,再给几个能立刻解决的办法:
问题根源
Flask默认依赖Werkzeug的开发服务器,在Python 3.6及更早的版本里,Windows系统的socket处理存在一个小缺陷:当你访问过路由后,服务器会留下一些未完全关闭的客户端连接或者后台线程,它得等这些连接超时(大概就是你遇到的10秒)才会彻底退出。
实用解决方案
禁用多线程启动服务器
Flask开发服务器默认是开启多线程的,你可以直接在代码里关掉它,这样就不会有残留线程拖慢退出速度。修改你的deploy.py:from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Hello World!' if __name__ == '__main__': app.run(threaded=False) # 关闭多线程改完之后再启动,访问路由后按CTRL+C应该就能秒退了。
命令行启动时关闭自动重载
要是不想改代码,也可以在启动脚本时加个--no-reload参数,关闭自动重载功能,这也能避免后台线程导致的退出延迟:python deploy.py --no-reload升级Python版本(长期推荐)
这个问题在Python 3.7及以后的版本里已经被官方修复了。而且Python 3.6早就停止维护了,要是你的项目允许,升级到3.7+不仅能解决这个退出延迟的问题,还能拿到更多新特性和安全补丁,一举两得。
应急小技巧
如果上面的方法暂时没起效,你可以试试连续按两次CTRL+C——第一次触发服务器的退出流程,第二次直接强制终止所有残留进程,虽然有点粗暴,但应急用挺管用。
内容的提问来源于stack exchange,提问作者FMA
相关产品推荐
相关产品推荐

