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

Flask/Gunicorn服务如何自动重载以获取更新后的CSV数据?

解决Flask服务无法自动读取更新后CSV文件的问题

问题根源

你的代码在服务启动时就把CSV文件内容读取到全局变量bd、A、B中了,后续CSV文件更新后,这些变量不会自动重新读取,只有重启服务或触发重载时才会刷新,这就是返回旧数据的原因。

最优解决方案:将文件读取逻辑移至路由内部

把读取CSV和提取数据的代码放到路由函数里,这样每次请求都会重新读取最新的CSV文件,不需要重启或重载服务。修改后的代码如下:

from flask import Flask, request, jsonify
import pandas as pd

app = Flask(__name__)

@app.route('/')
def get_user():
    # 每次请求时重新读取CSV文件
    bd = pd.read_csv('File.csv')
    A = bd['A'][0]
    B = bd['B'][0] 
    user_data = {'A': str(A), 'B': '+' + str(B)}
    
    return jsonify(user_data), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

你考虑的cron触发重载方法的可行性

这种方法可行但不推荐:

  • 原理是Gunicorn默认会监控代码文件变化,当app.py被修改(哪怕是无修改保存)时,会自动重启工作进程,从而重新读取CSV文件。
  • 缺点是每次重载会导致服务短暂中断,影响用户请求;而且完全没必要为了更新数据而重启整个服务,属于过度操作。

进阶优化:文件变化监控(可选)

如果担心每次请求读取文件影响性能,可以用watchdog库监控CSV文件的变化,当文件更新时自动重新加载数据到内存:

  1. 安装依赖:pip install watchdog
  2. 示例代码:
from flask import Flask, request, jsonify
import pandas as pd
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

# 初始化全局变量
bd = pd.read_csv('File.csv')
A = bd['A'][0]
B = bd['B'][0]

app = Flask(__name__)

# 定义文件变化监控处理器
class CSVUpdateHandler(FileSystemEventHandler):
    def on_modified(self, event):
        if event.src_path.endswith('File.csv'):
            global bd, A, B
            bd = pd.read_csv('File.csv')
            A = bd['A'][0]
            B = bd['B'][0]
            print("CSV文件已更新,重新加载数据")

# 启动监控
event_handler = CSVUpdateHandler()
observer = Observer()
observer.schedule(event_handler, path='.', recursive=False)
observer.start()

@app.route('/')
def get_user():
    user_data = {'A': str(A), 'B': '+' + str(B)}
    return jsonify(user_data), 200

if __name__ == '__main__':
    try:
        app.run(host='0.0.0.0', port=8000)
    finally:
        observer.stop()
        observer.join()

这种方法既保证了数据实时更新,又避免了每次请求读取文件的开销,适合数据更新频率不高但对性能有要求的场景。

内容的提问来源于stack exchange,提问作者user24959239

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:07:42