报错信息
C:\jesse\web\myFlaskProject> python .\hello.py
* Serving Flask app 'hello'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 817-634-088
Traceback (most recent call last):
File "C:\jesse\web\myFlaskProject\hello.py", line 10, in <module>
app.run(debug=True)
File "C:\Users\epro\AppData\Local\conda\conda\envs\spider39\lib\site-packages\flask\app.py", line 625, in run
run_simple(t.cast(str, host), port, self, **options)
File "C:\Users\epro\AppData\Local\conda\conda\envs\spider39\lib\site-packages\werkzeug\serving.py", line 1077, in run_simple
srv = make_server(
File "C:\Users\epro\AppData\Local\conda\conda\envs\spider39\lib\site-packages\werkzeug\serving.py", line 917, in make_server
return ThreadedWSGIServer(
File "C:\Users\epro\AppData\Local\conda\conda\envs\spider39\lib\site-packages\werkzeug\serving.py", line 779, in __init__
self.socket = socket.fromfd(fd, address_family, socket.SOCK_STREAM)
File "C:\Users\epro\AppData\Local\conda\conda\envs\spider39\lib\socket.py", line 544, in fromfd
nfd = dup(fd)
OSError: [WinError 10038] 在一个非套接字上尝试了一个操作
启动的服务代码代码在这里
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/hello')
def hello():
return jsonify({"hello": "world"})
if __name__ == '__main__':
app.run(debug=True)
解决方案:
通过添加 use_reloader=False 参数,可以避免在 Windows 上遇到的套接字错误问题。
在 Windows 上运行 Flask 应用程序时,调试器重新加载机制引起的。Flask 的调试模式默认启用多线程,并且在 Windows 上有时会导致这个错误。您可以通过设置 **use_reloader=False** 来禁用自动重新加载功能,以避免这个问题。通过添加 **use_reloader=False** 参数,可以避免在 Windows 上遇到的套接字错误问题。
在一般情况下,use_reloader参数与debug参数保持一致。
原因
- 多进程机制: Flask 调试器会启动一个子进程以实现自动重载功能。在 Windows 上,这种多进程处理有时会导致套接字操作出错。
- 资源重用问题: Windows 处理套接字和文件描述符的方式与 Unix 系统不同,可能会导致资源重用问题,特别是在调试模式下。
所以在Windows下使用flask开发,同时debug=True模式下,最好需要设置use_reloader=False,
并在开发中自己手动重启服务。【注意端口占用问题】