0

0

使用 Flask 和 Python 定时刷新 CSV 文件

霞舞

霞舞

发布时间:2025-08-24 23:42:30

|

865人浏览过

|

来源于php中文网

原创

使用 flask 和 python 定时刷新 csv 文件

本文旨在指导开发者如何使用 Flask 框架和 Python 实现定时刷新 CSV 文件的功能,以便在 Web 应用中展示最新的数据。我们将探讨使用 Celery、APScheduler 或简单的 cron 任务来自动化数据抓取和更新 CSV 文件的过程,并讨论如何处理文件锁定的问题,确保数据的一致性。

在构建 Web 应用时,经常需要从外部数据源获取信息,并将其展示在网页上。如果数据源是 CSV 文件,并且需要定期更新,就需要一种机制来自动刷新 CSV 文件。本文将介绍几种使用 Flask 和 Python 实现此功能的方法。

1. 使用 Celery

Celery 是一个分布式任务队列,可以用于异步执行任务。它非常适合用于定时刷新 CSV 文件,因为它可以在后台运行,而不会阻塞 Web 应用的主线程。

立即学习Python免费学习笔记(深入)”;

  • 安装 Celery:

    pip install celery redis

    这里使用了 Redis 作为 Celery 的消息代理。你也可以使用其他的消息代理,如 RabbitMQ。

  • 创建 Celery 任务:

    from celery import Celery
    import pandas as pd
    
    celery_app = Celery('my_app', broker='redis://localhost:6379/0')
    
    @celery_app.task
    def update_csv():
        """
        This task scrapes data and updates the CSV file.
        Replace this with your actual scraping and CSV writing logic.
        """
        # Your scraping logic here
        data = {'col1': [1, 2], 'col2': [3, 4]}  # Example data
        df = pd.DataFrame(data)
        df.to_csv('data.csv', index=False)
        print("CSV file updated!")
    
    @celery_app.on_after_configure.connect
    def setup_periodic_tasks(sender, **kwargs):
        sender.add_periodic_task(600.0, update_csv.s(), name='update csv every 10 minutes')

    这段代码定义了一个 Celery 任务 update_csv,它负责抓取数据并更新 CSV 文件。setup_periodic_tasks 函数使用 add_periodic_task 方法来定期执行 update_csv 任务,这里设置为每 600 秒(10 分钟)执行一次。

  • 启动 Celery Worker:

    celery -A your_module_name worker -l info

    将 your_module_name 替换为包含 Celery 应用的 Python 模块的名称。

2. 使用 APScheduler

APScheduler 是一个 Python 库,用于在后台调度任务。它比 Celery 更轻量级,更易于设置,但不如 Celery 强大,不适合大规模的分布式任务。

  • 安装 APScheduler:

    pip install APScheduler
  • 创建调度器并添加任务:

    启明星企业抽奖程序1.0
    启明星企业抽奖程序1.0

    启明星企业抽奖程序 系统采用ASP.NET4.0 无需数据库。在企业抽奖时,请勿关闭或者刷新页面。因为系统目前没有提供保存数据功能。例如在抽二等奖和一等奖之间,可能有时间间隔。那么,此时,你可以按F11取消全屏,然后最小化页面,再单击右下角喇叭,设置无声。1.启明星抽奖程序配置说明使用说明:在lottery/lottery文件夹下,有3个文本文件。company.txt存放公司名称,award.t

    下载
    from flask import Flask
    from apscheduler.schedulers.background import BackgroundScheduler
    import pandas as pd
    
    app = Flask(__name__)
    
    def update_csv():
        """
        This task scrapes data and updates the CSV file.
        Replace this with your actual scraping and CSV writing logic.
        """
        # Your scraping logic here
        data = {'col1': [5, 6], 'col2': [7, 8]}  # Example data
        df = pd.DataFrame(data)
        df.to_csv('data.csv', index=False)
        print("CSV file updated!")
    
    scheduler = BackgroundScheduler()
    scheduler.add_job(func=update_csv, trigger="interval", minutes=10)
    scheduler.start()
    
    @app.route('/')
    def index():
        return "App is running!"
    
    if __name__ == '__main__':
        app.run(debug=True)

    这段代码创建了一个 BackgroundScheduler 实例,并使用 add_job 方法添加了一个任务 update_csv,该任务将每 10 分钟执行一次。

3. 使用 Cron 任务

Cron 是一个 Linux 系统下的定时任务工具。你可以使用它来定期执行 Python 脚本,该脚本负责刷新 CSV 文件。

  • 创建 Python 脚本:

    import pandas as pd
    
    def update_csv():
        """
        This task scrapes data and updates the CSV file.
        Replace this with your actual scraping and CSV writing logic.
        """
        # Your scraping logic here
        data = {'col1': [9, 10], 'col2': [11, 12]}  # Example data
        df = pd.DataFrame(data)
        df.to_csv('data.csv', index=False)
        print("CSV file updated!")
    
    if __name__ == '__main__':
        update_csv()

    将此脚本保存为 update_csv.py。

  • 编辑 Cron 表达式:

    在终端中输入 crontab -e,打开 Cron 表达式编辑器。

  • 添加 Cron 任务:

    在 Cron 表达式编辑器中添加以下行:

    */10 * * * * python /path/to/update_csv.py

    将 /path/to/update_csv.py 替换为 update_csv.py 脚本的实际路径。这个 Cron 表达式表示每 10 分钟执行一次 update_csv.py 脚本。

处理文件锁定

当多个进程同时尝试写入同一个 CSV 文件时,可能会发生文件锁定问题,导致数据损坏。为了避免这种情况,可以使用以下方法:

  • 文件锁定库: 使用 fcntl 或 filelock 等库来显式地锁定文件,确保只有一个进程可以写入文件。
  • 使用数据库: 将数据存储在数据库中,而不是 CSV 文件中。数据库系统通常提供内置的并发控制机制,可以避免文件锁定问题。由于你在问题中提到了 SQLAlchemy,这是一个推荐的方案。
  • 临时文件: 先将数据写入到一个临时文件,然后使用原子操作(例如 os.rename)将临时文件重命名为最终的 CSV 文件。

注意事项和总结

  • 选择哪种方法取决于你的具体需求。Celery 适合于需要分布式任务队列的场景,APScheduler 适合于简单的定时任务,Cron 任务适合于在 Linux 系统下运行的脚本。
  • 务必处理文件锁定问题,以确保数据的一致性。
  • 在生产环境中,建议使用更健壮的错误处理机制,例如日志记录和异常处理。
  • 对于频繁更新的数据,使用数据库可能比使用 CSV 文件更有效率。

通过本文的介绍,你应该能够使用 Flask 和 Python 实现定时刷新 CSV 文件的功能,并将其应用于你的 Web 应用中。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

202

2024.02.23

Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

86

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

72

2025.12.15

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

328

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

235

2023.10.07

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

502

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

502

2023.08.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

978

2023.11.02

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.9万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号