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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:50:28