flask应用在windows上启动,套接字错误 【ThreadedWSGIServer】==>【OSError: [WinError 10038] 在一个非套接字上尝试了一个操作】

报错信息

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参数保持一致。

原因

  1. 多进程机制: Flask 调试器会启动一个子进程以实现自动重载功能。在 Windows 上,这种多进程处理有时会导致套接字操作出错。
  2. 资源重用问题: Windows 处理套接字和文件描述符的方式与 Unix 系统不同,可能会导致资源重用问题,特别是在调试模式下。

所以在Windows下使用flask开发,同时debug=True模式下,最好需要设置use_reloader=False,
并在开发中自己手动重启服务。【注意端口占用问题】

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jesse_Kyrie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值