Flask服务器需手动停止才能执行后续功能的问题求助
问题根源与解决方案
你的核心问题是代码结构错误:你把CSV数据提取的逻辑写在了app.run()之后,而app.run()是阻塞式的——它会一直运行Flask服务器,只有当你按Ctrl+C停止服务器时,才会执行后面的代码。Flask是请求驱动的框架,所有处理前端请求的逻辑必须放在路由函数内部,这样每次前端发送请求,服务器就能实时处理并返回结果,完全不需要重启或停止服务器。
正确的代码示例
以下是符合要求的最简实现,你可以直接参考修改:
from flask import Flask, request, jsonify import csv # 初始化Flask应用 app = Flask(__name__) # 定义处理前端请求的路由 @app.route('/fetch-csv-data', methods=['POST']) def fetch_csv_data(): # 1. 获取前端提交的输入数据 # 假设前端以JSON格式发送数据,键名为"user_input" user_input = request.get_json().get('user_input') if not user_input: # 如果没有收到输入,返回错误响应 return jsonify({"error": "缺少输入数据"}), 400 # 2. 根据输入从CSV提取数据 matched_data = [] # 替换成你的CSV文件路径,确保路径正确 with open('your_data.csv', 'r', encoding='utf-8') as csv_file: # 用DictReader读取CSV,每行数据会变成字典(列名作为键) csv_reader = csv.DictReader(csv_file) for row in csv_reader: # 这里替换成你的匹配逻辑,比如匹配某一列的值 if row['target_column'] == user_input: matched_data.append(row) # 3. 将结果返回给前端 return jsonify({"matched_data": matched_data}) # 启动服务器 if __name__ == '__main__': # debug=True开启开发模式,修改代码后服务器会自动重启,开发时很方便 app.run(debug=True)
关键注意事项
- 路由函数是核心:所有和请求处理相关的逻辑(接收输入、读取CSV、返回结果)必须放在路由函数(比如上面的
fetch_csv_data)内部,这样前端每发一次请求,这个函数就会执行一次,实时返回结果。 - 避免阻塞代码:不要把业务逻辑写在
app.run()之后,app.run()会一直占用主线程,后面的代码永远不会在服务器运行时执行。 - 请求格式匹配:前端发送请求的方法要和路由定义的
methods一致(比如上面用的是POST,前端就不能用GET);如果前端用表单提交,就用request.form.get('user_input')代替request.get_json()。 - 文件路径正确:确保CSV文件和Flask脚本在同一目录,或者使用绝对路径(比如
C:/projects/data.csv),避免找不到文件的错误。 - 开发模式便利:开启
debug=True后,修改代码保存后服务器会自动重启,不用手动停止再启动,适合开发阶段使用。
内容的提问来源于stack exchange,提问作者Tokaj Charles
相关产品推荐
相关产品推荐

