Windows服务器上Flask服务停滞需键盘输入恢复的原因咨询
问题解决:Windows上Flask+Waitress服务停滞,按键后恢复
你的问题核心原因是Windows命令提示符的快速编辑模式,这是控制台默认特性——当误触鼠标选中窗口或触发编辑状态时,进程会被强制暂停,直到按下任意键才恢复。以下是针对性解决步骤和优化建议:
一、彻底解决停滞问题:关闭快速编辑模式
- 打开运行服务的命令提示符窗口,右键点击窗口标题栏,选择「属性」
- 切换到「选项」标签页,取消勾选「快速编辑模式」和「插入模式」
- 点击「确定」保存设置,重启服务后生效
二、代码与配置优化建议
1. 缓存账号信息,减少重复IO操作
你的comparePassword函数每次请求都读取admin.json文件,频繁磁盘IO可能加重服务负担,建议启动时一次性加载到内存:
import flask from flask import request, jsonify import json import logging app = flask.Flask(__name__) # 启动时加载管理员信息到内存,避免重复读文件 with open("admin.json", "r") as f: admin_data = json.load(f) @app.route('/api/v1/admin/login', methods=['GET']) def api_Admin_User(): username = request.args.get('username') password = request.args.get('password') if comparePassword(username, password): logging.info(f"admin login successful for {username}") return jsonify({"success": True}) else: logging.warning(f"admin login failed for \"{username}\" with password \"{password}\" and IP \"{request.remote_addr}\"") return jsonify({"success": False}) def comparePassword(username, password): if not username or not password: return False username_lower = username.lower() if username_lower not in admin_data: return False logging.info(f"comparing password for {username}") return admin_data[username_lower]["password"] == password from waitress import serve # 增加线程数提升并发处理能力 serve(app, host="0.0.0.0", port=5000, threads=4)
2. 配置日志输出到文件
避免控制台日志缓冲带来的潜在问题,将日志写入文件更稳定:
# 在代码开头添加日志配置 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('app.log'), logging.StreamHandler() # 保留控制台输出可选 ] )
3. 脱离命令行运行服务
如果需要长期稳定运行,可使用nssm等工具将服务包装成Windows后台服务,彻底摆脱命令行窗口的限制。
内容的提问来源于stack exchange,提问作者YouAreBamboozled
相关产品推荐
相关产品推荐

