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
    评论
我可以为您提供一些关于使用 Flask 和 MySQL 进行口开发的具体代码和指导。 首先,您需要安装 Flask 和 MySQL Connector。您可以通过以下命令在 Linux 上安装它们: Flask: ``` sudo pip install Flask ``` MySQL Connector: ``` sudo pip install mysql-connector-python ``` 下来,您可以使用以下代码创建一个 Flask 应用程序,该应用程序将提供与 MySQL 数据库的连,并为客户端请求提供响应: ``` python from flask import Flask, jsonify, request import mysql.connector app = Flask(__name__) # MySQL 连参数 db_config = { 'user': 'username', 'password': 'password', 'host': 'localhost', 'database': 'database_name' } # 数据库连函数 def connect_to_database(): return mysql.connector.connect(**db_config) # API 端点 @app.route('/api', methods=['GET']) def get_data(): # 获取请求参数 param = request.args.get('param') # 连数据库 conn = connect_to_database() # 查询数据库并获取数据 cursor = conn.cursor() cursor.execute("SELECT * FROM table_name WHERE field = %s", (param,)) data = cursor.fetchall() # 返回数据 response = {'data': data} return jsonify(response) # 启动应用 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) ``` 在上面的代码中,我们定义了一个名为 `get_data` 的 API 端点,它将获取客户端请求中的参数,使用该参数去查询 MySQL 数据库,并将查询结果返回给客户端。您可以根据需要更改查询参数和查询表名等变量。此外,您还需要将用户名、密码、主机名、数据库名等数据库连参数更改为您的设置。 使用 `app.run()` 函数启动 Flask 应用程序,该函数将启动本地服务器并将应用程序运行在本地计算机的 5000 端口上。 在本地计算机上,您可以通过在浏览器中输入以下地址来测试 API 端点: ``` http://localhost:5000/api?param=value ``` 请注意,上面的代码只是一个例子,您可能需要更改代码以适应您的具体用例。但是,它提供了一个基本框架,您可以使用它来编写一个 MySQL 口,为您的客户端提供数据服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jesse_Kyrie

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

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

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

打赏作者

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

抵扣说明:

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

余额充值