Flask Web应用打包为带--windowed参数的exe后,关闭浏览器标签页无法终止Python进程的问题求助
Flask Web应用打包为带--windowed参数的exe后,关闭浏览器标签页无法终止Python进程的问题求助
大家好,我最近做了一个用来将测试数据可视化成图表的Web应用,用Flask开发的。启动应用时,它会自动打开浏览器的一个标签页展示数据,我用打包工具把它做成exe的时候加了--windowed参数,这样就不会弹出控制台窗口,体验更流畅一点。
但现在碰到了个棘手的问题:每次启动应用后,任务管理器里会出现一个浏览器标签页进程,还有两个Python exe进程。当我关闭浏览器标签页时,标签页进程确实终止了,但那两个Python进程却一直留在任务管理器里没消失。要是我再重新运行一次应用,任务管理器里的Python进程就变成4个了,反复运行的话进程会越来越多,内存占用也跟着持续上涨。
我自己试了几种方法想解决,但都没效果,想请大家帮忙看看问题出在哪。
先贴一下我的主代码:
import os from flask import Flask import webbrowser BASE_DIR = os.path.abspath(os.path.dirname(__file__)) app = Flask(__name__, template_folder=os.path.join(BASE_DIR, 'templates'), static_folder=os.path.join(BASE_DIR, 'static')) app.config['DEBUG'] = False # Enable debug mode for detailed error logs if __name__ == '__main__': # Automatically open the browser webbrowser.open("http://127.0.0.1:5000") app.run(debug=False, use_reloader=False)
我尝试的几种方法:
方法A:用taskkill命令强制结束当前进程
import subprocess import os import sys def shutdown(): print("Received shutdown request. Stopping application...") # Get the current process ID current_pid = os.getpid() # Run Windows taskkill command to forcefully kill the EXE subprocess.run(f'taskkill /F /PID {current_pid}', shell=True) sys.exit(0) # Ensure full exit
方法B:发送SIGTERM信号终止主进程
import os import signal import sys # Kill the main process os.kill(os.getpid(), signal.SIGTERM) sys.exit(0) # Ensure full exit
方法C:调用Werkzeug的服务器关闭函数
from flask import request func = request.environ.get("werkzeug.server.shutdown") if func is None: raise RuntimeError("Not running with the Werkzeug Server") func()
这些方法我都试过了,但还是没能解决问题。我的期望是:当关闭浏览器标签页的时候,不仅标签页进程能终止,那两个Python exe进程也能完全退出,把占用的内存都释放掉,不会每次运行都残留进程。
有没有朋友遇到过类似的问题?或者能给我一些解决思路吗?
备注:内容来源于stack exchange,提问作者LM2020
相关产品推荐
相关产品推荐

