如何从C#端正确合规关闭本地运行的Flask应用程序?
解决方案
方案1:修正C#进程启动逻辑(优先推荐)
你当前调用process.Kill()无法关停Flask的核心原因是:启动时绕了一层cmd.exe,C#持有的进程对象是cmd进程而非Flask的Python宿主进程,杀掉cmd并不会连带退出Python子进程
修正后的C#启动代码如下,直接启动Python解释器,后续直接Kill对应进程即可实现正常关停,无需修改Python侧代码:
var process = new Process(); process.StartInfo = new ProcessStartInfo() { FileName = "python.exe", Arguments = @"Assets\Scripts\server.py", UseShellExecute = false, // 可选配置:隐藏Python运行黑框 CreateNoWindow = true }; process.Start(); // 关停逻辑直接调用即可 // process.Kill(); // process.WaitForExit();
方案2:Flask侧合规HTTP关停接口实现
如果你的场景需要通过HTTP请求触发关停,可使用以下兼容高版本Werkzeug的实现,不会触发废弃警告:
- 先导入依赖模块
import os import signal from flask import Flask, request
- 实现关停接口
@app.route('/shutdown', methods=['POST']) def shutdown_server(): # 向当前Python进程发送SIGINT中断信号,等价于手动按Ctrl+C,Werkzeug开发服务器会正常执行关停逻辑 os.kill(os.getpid(), signal.SIGINT) return "服务已触发关停"
注意:该实现仅适用于本地自用的Flask内置开发服务器场景,若后续部署到生产环境使用Gunicorn、uWSGI等WSGI容器,需要对应调整关停逻辑。
内容的提问来源于stack exchange,提问作者JohnWick
相关产品推荐
相关产品推荐

