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

使用IDLE运行Flask-SocketIO代码时遇Shell重启及异常日志问题

解决IDLE中运行Flask-SocketIO代码导致Shell重启的问题

嘿,我碰到过类似的情况!IDLE本身和Flask-SocketIO的自动重载机制有点冲突,这大概率是导致Shell直接重启的原因。

先给你拆解下问题:Flask-SocketIO默认会开启自动重载(就是你看到的Restarting with stat),但IDLE的Shell环境没办法很好地兼容这种进程重启的操作,直接就触发了Shell重启,还打断了日志输出,所以你只能看到半截回溯。

给你几个实用的解决办法:

  • 关闭Flask-SocketIO的自动重载:在初始化SocketIO的时候加上use_reloader=False参数(或者直接关闭debug模式debug=False),示例代码如下:

    from flask import Flask
    from flask_socketio import SocketIO
    
    app = Flask(__name__)
    # 关闭自动重载,避免和IDLE冲突
    socketio = SocketIO(app, use_reloader=False)
    
    @socketio.on('message')
    def handle_message(data):
        print('received message:', data)
    
    if __name__ == '__main__':
        socketio.run(app)
    

    这样就不会触发进程自动重启,IDLE的Shell也能正常运行代码并输出完整日志了。

  • 换用命令行运行代码:IDLE的Shell确实不是运行这类带实时通信框架代码的最佳选择,你可以直接打开系统的命令提示符/终端,用python your_script.py来运行,这样不仅能看到完整的日志,自动重载机制也能正常工作。

  • 检查依赖版本兼容性:有时候Flask、Flask-SocketIO和其依赖的异步库(比如gevent)版本不匹配,也会导致这类奇怪的崩溃。你可以试着更新下相关依赖:

    pip install --upgrade flask flask-socketio
    

另外,你提到加了print(3)只看到半截日志,这就是因为自动重载触发后,IDLE的Shell还没来得及输出完整内容就被强制重启了,关闭自动重载后应该就能看到完整的打印信息和日志了。

内容的提问来源于stack exchange,提问作者Man jpeglover

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:23:08