Flask开启debug模式报错:Failed to import fsevents且出现OSError: [Errno 24] Too many open files
Flask开启debug模式报错:Failed to import fsevents且出现OSError: [Errno 24] Too many open files
这种问题我之前在Mac上折腾Flask debug模式时也碰到过,结合你的环境(macOS 15.5、Python 3.12.7、Flask 3.0.3),给你几个实用的解决方向:
先解决fsevents的依赖兼容问题
你提到装了MacFSEvents但没用,大概率是版本适配的问题——Python 3.12对部分旧版库的支持有变化,建议直接重装适配性更好的fsevents版本,同时确保watchdog的版本也兼容:pip install --force-reinstall fsevents==2.4.0 pip install --force-reinstall watchdog==4.0.1这两个版本对Python 3.12和macOS 15的支持比较稳定,你可以试试。
调高Mac的文件描述符限制
“Too many open files”是因为Flask debug模式的自动重载会监控项目里的大量文件,而Mac默认的文件描述符上限太低,很容易触发这个错误:- 临时生效(当前终端会话有效):
打开终端先运行ulimit -n 4096,再启动Flask debug模式,这个方法最快验证是否有效。 - 永久生效:
- 编辑(如果没有就创建)
/etc/sysctl.conf文件,添加两行:kern.maxfiles=65536 kern.maxfilesperproc=65536 - 运行以下命令让配置立即生效:
sudo sysctl -w kern.maxfiles=65536 sudo sysctl -w kern.maxfilesperproc=65536 - 再根据你用的shell(bash或zsh),编辑
~/.bash_profile或~/.zshrc,添加ulimit -n 65536,重启终端后永久生效。
- 编辑(如果没有就创建)
- 临时生效(当前终端会话有效):
减少Flask debug模式监控的文件数量
如果你的项目里有大量文件的目录(比如node_modules、虚拟环境venv、缓存目录__pycache__),Flask的重载器会默认监控这些目录,导致打开过多文件。可以在代码里配置排除这些目录:from flask import Flask import werkzeug from werkzeug._reloader import _default_is_excluded app = Flask(__name__) if app.debug: # 定义需要排除的目录 excluded_dirs = ('node_modules', 'venv', '__pycache__', '.git') # 自定义排除规则 def custom_exclude(path): if any(dir_name in path for dir_name in excluded_dirs): return True return _default_is_excluded(path) # 替换默认的排除逻辑 werkzeug._reloader._default_is_excluded = custom_exclude临时替代方案:关闭自动重载
如果上面的方法都暂时没效果,可以先关闭Flask的自动重载功能应急,这样就不会触发文件监控相关的问题:flask run --debug --no-reload缺点是修改代码后需要手动重启服务,但至少能正常用debug模式的其他功能。
你可以先从临时调高ulimit开始测试,这个最快速,再逐步排查依赖或配置问题,应该能解决你的问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

