You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3.10中Flask热重载失效:非套接字操作错误排查

Flask热重载失效并抛出WinError 10038的排查方案

问题背景

使用Python 3.10.11、Flask 3.0.0和Werkzeug 3.0.1开发的项目,此前运行正常,时隔数月后热重载功能突然失效,抛出错误:[WinError 10038] 尝试对非套接字执行操作。此外,有时重启应用(关闭并重新打开终端)后代码仍未更新。

已尝试的无效操作:

  • 更换多个Python、Flask及Werkzeug版本
  • 执行netsh winsock reset命令
  • 删除并重建pipenv环境,在全局和虚拟环境中运行应用
  • 使用多种启动方式:flask --debug run、py ./app.py、pipenv run py ./app.py
  • 更换端口

报错堆栈信息:

Exception in thread Thread-2 (serve_forever):
Traceback (most recent call last):
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\site-packages\werkzeug\serving.py", line 806, in serve_forever
    super().serve_forever(poll_interval=poll_interval)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\socketserver.py", line 232, in serve_forever
    ready = selector.select(poll_interval)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\selectors.py", line 324, in select
    r, w, _ = self._select(self._readers, self._writers, [], timeout)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python310\lib\selectors.py", line 315, in _select
    r, w, x = select.select(r, w, w, timeout)
OSError: [WinError 10038] An operation was attempted on something that is not a socket 

排查方向

  • 强制清理残留进程

    • 打开任务管理器,结束所有与Python相关的进程(包括python.exe、flask.exe),再重新启动应用
    • 用命令行定位端口占用进程:netstat -ano | findstr :<你的端口号>,找到PID后执行taskkill /F /PID <PID>强制终止
  • 排查安全软件干扰

    • 暂时关闭系统防火墙、第三方杀毒软件(尤其是监控本地网络连接的工具),测试热重载是否恢复正常,排查是否是安全软件拦截了套接字的释放与重建
  • 统一调试模式配置

    • 避免混用多种调试启动方式,比如不要同时使用flask --debug run和代码中的app.run(debug=True),只保留一种启动逻辑
    • 尝试关闭重载启动应用:flask run --no-reload,如果能正常运行,说明问题出在重载机制的进程管理环节
  • 检查代码中的资源泄漏

    • 排查代码中是否有自定义的信号处理函数(如SIGINT/SIGTERM),这类函数可能导致进程退出时未正确释放套接字资源
    • 检查是否存在未关闭的文件句柄、数据库连接、线程等资源,这些可能导致重载时父进程无法正常终止子进程
  • 测试极简应用定位问题

    • 创建一个最小化的Flask应用,在相同环境下测试热重载:
      from flask import Flask
      app = Flask(__name__)
      
      @app.route('/')
      def hello():
          return 'Hello World!'
      
      if __name__ == '__main__':
          app.run(debug=True)
      
    • 如果极简应用热重载正常,说明问题出在原项目的代码或依赖冲突上,可逐步添加原项目的代码/依赖来定位具体诱因

内容的提问来源于stack exchange,提问作者Ilan Yashuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:14:57