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

如何在Flask中每10分钟自动刷新CSV文件?

实现Flask应用定时刷新CSV文件(无需用户请求触发)

针对你在Flask博彩网站中需要每10分钟自动刷新CSV文件的需求,以下是几种可靠的实现方案:

方案一:使用后台线程(基于threading模块)

你已导入threading模块,可直接用它创建后台循环线程,定时执行数据抓取与CSV生成逻辑。

修改你的create_app函数,添加后台线程启动逻辑:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path
import time
import threading

# 假设你已实现该CSV生成函数
def refresh_csv():
    while True:
        # 写入你已完成的抓取数据并生成CSV的代码
        print("CSV文件已刷新")
        # 等待10分钟(600秒)
        time.sleep(600)

db = SQLAlchemy()
DB_NAME = "database.db"

def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY']="abcjzllkk"
    
    from .views import views
    from .auth import auth
    
    app.register_blueprint(views, url_prefix="/")
    app.register_blueprint(auth, url_prefix="/")
    
    # 启动后台定时线程,设置daemon=True确保Flask退出时线程终止
    csv_thread = threading.Thread(target=refresh_csv, daemon=True)
    csv_thread.start()
    
    return app 

注意:该方案适合开发或小型部署场景,若Flask使用多进程部署(如Gunicorn多worker),会启动多个线程导致重复执行刷新任务,此时更推荐方案二。

方案二:使用APScheduler(专业定时任务库)

APScheduler是Python生态中成熟的定时任务库,支持多种调度规则,适合生产环境。

  1. 先安装APScheduler:
pip install apscheduler
  1. 修改Flask应用代码,集成APScheduler:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path
from apscheduler.schedulers.background import BackgroundScheduler

# 你的CSV刷新函数
def refresh_csv():
    # 执行数据抓取和CSV生成逻辑
    print("CSV文件已刷新")

db = SQLAlchemy()
DB_NAME = "database.db"

def create_app():
    app = Flask(__name__)
    app.config['SECRET_KEY']="abcjzllkk"
    
    from .views import views
    from .auth import auth
    
    app.register_blueprint(views, url_prefix="/")
    app.register_blueprint(auth, url_prefix="/")
    
    # 初始化后台调度器
    scheduler = BackgroundScheduler()
    # 添加定时任务:每10分钟执行一次refresh_csv
    scheduler.add_job(refresh_csv, 'interval', minutes=10)
    # 启动调度器
    scheduler.start()
    
    # 确保Flask退出时关闭调度器
    @app.teardown_appcontext
    def shutdown_scheduler(exception=None):
        scheduler.shutdown()
    
    return app 

该方案稳定性更强,支持复杂定时规则,是生产环境的优先选择。

方案三:使用外部定时任务(如系统Cron)

若应用部署在Linux服务器上,可直接使用系统Cron定时任务,独立于Flask应用执行CSV刷新脚本。

  1. 将数据抓取和CSV生成代码单独写成脚本(如refresh_csv.py)。
  2. 编辑Cron任务:
crontab -e
  1. 添加以下内容,实现每10分钟执行一次脚本:
*/10 * * * * /usr/bin/python3 /path/to/your/refresh_csv.py

该方案完全独立于Flask应用,避免了应用内部线程的潜在问题,适合大型部署场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:56:51