如何在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生态中成熟的定时任务库,支持多种调度规则,适合生产环境。
- 先安装APScheduler:
pip install apscheduler
- 修改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刷新脚本。
- 将数据抓取和CSV生成代码单独写成脚本(如
refresh_csv.py)。 - 编辑Cron任务:
crontab -e
- 添加以下内容,实现每10分钟执行一次脚本:
*/10 * * * * /usr/bin/python3 /path/to/your/refresh_csv.py
该方案完全独立于Flask应用,避免了应用内部线程的潜在问题,适合大型部署场景。
内容的提问来源于stack exchange,提问作者Jules Peter
相关产品推荐
相关产品推荐

