基于flask、flask-apscheduler定时框架建立的定时web定时运行py脚本实例

本文介绍了如何利用flask、flask-apscheduler和相关库在Windows上构建一个定时执行Python脚本的Web应用。应用具备任务刷新、添加计划、脚本刷新等功能,并能展示错误日志。还讨论了权限验证和前端使用ajax的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

  • 需要定时运行相应py脚本文件,及web上展示详细情况
  • 及时返回报错信息,及输出日志记录
  • 修改运行中的定时任务信息(名称、时间、及定时时间)
  • 动态导入脚本文件
  • 定时任务的开始、暂停、结束控制

思路

使用到的p库:flask、flask-scheduler、sqlite3、sqlalchemy、waitress
系统:Windows
py版本:python 3.7
由于运行在Windows上,所以使用了waitress 作为flask 应用的容器实现多线程、多进程。(由于gevent 是单线程的一开始尝试使用,发现怎么都无法进行定时任务。)
前端使用到ajax、boostrap、jquery…
下面介绍的button 都是基本使用ajax去相应事件。

开始动手了

首先使用(HTML、JAVASCRIPT、CSS)先建立好自己的登录模块,登录窗口

[外链图片转存中...(img-wBiwIRop-1627972971637)]
建立好相应的登录界面,做好权限控制以及登录检验。
使用flask 检验登录以及sqlalchemy的ORM控制,

有模板的可以套一套。
配置文件

# config.py
app = Flask(__name__, template_folder=r'.\moban3365\moban3365', static_folder=r'.\moban3365\moban3365\assets')
# scheduler = BackgroundScheduler(app)

class  Config(object):
    # JOBS = [
    #     {
   
    #         'id': 'job1',
    #         'func': 'workdaysub:job1',
    #         'args': (),
    #         'trigger': 'interval',
    #         'seconds': 10
    #     }
    # ]
    SCHEDULER_JOBSTORES = {
   
        'default': SQLAlchemyJobStore(url='sqlite:///.\yoursqlie.db')
    }
    SCHEDULER_EXECUTORS = {
   
        'default': {
   'type': 'threadpool', 'max_workers': 20}
    }
    SCHEDULER_JOB_DEFAULTS = {
   
        'coalesce': False,
        'max_instances': 3
    }
    # SCHEDULER_API_ENABLED = True
    SCHEDULER_API_ENABLED = False
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///.\workday.db'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mssql+pymssql://yourservice/PYR?charset=utf8'
# app.config['SQLALCHEMY_DATABASE_URI'] = 'mssql+pyodbc://yourservice/PYR?driver=SQL+Server?charset=unicode'

app.config['SECRET_KEY'] = 'alkjfdlkajfdlkjaslkdfjlkj'

app.config['DEBUG'] = True
# app.config['SCHEDULEER_API_ENABLED'] = True
app.permanent_session_lifetime = timedelta(minutes=60)  # 设置session到期时间
# app.config["SQLALCHEMY_NATIVE_UNICODE"] = True
app.config["THREADED"] = True
# app.config["SCHEDULER_JOBSTORES"]  = {'default':SQLAlchemyJobStore(url='sqlite:///.\yoursqlite.db')}
# 设置时区,时区不一致会导致定时任务的时间错误
# SCHEDULER_TIMEZONE = 'Asia/Shanghai'
# app.config["SCHEDULER_EXECUTORS"] = {'default': {'type': 'threadpool', 'max_workers': 10}}
# app.config.from_object(config),use_native_unicode="utf8"

db = SQLAlchemy(app)
db.init_app(app)
scheduler = APScheduler()
app.config.from_object(Config())
scheduler.init_app(app)

# @scheduler.task('interval', id='write_file', seconds=10)

# scheduler.add_job(id="write_xlsx" ,func=job1, trigger='interval', seconds=10)

scheduler.start()

使用BluePrint进行视图管理
在这里插入图片描述

from app.config import app
from app.Model import db, Script_Status
from User.view import ur
from Contract.view import ct
from Report.veiw import rt
from Scheduler_Job.view import scheduler_job


app.register_blueprint(ct)
app.register_blueprint(ur)
app.register_blueprint(rt)
app.register_blueprint(scheduler_job)

建立shceduler view视图
填充前端代码
在这里插入图片描述
设置了刷新功能、添加执行计划功能、脚本刷新功能

功能:

刷新功能:

刷新查询还在计划中的scheduler
刷先显示如下,添加了暂停以及删除功能,还有暂停后重新启动的功能
在这里插入图片描述

添加执行计划功能:

可以根据选用的脚本名称,命名脚本以及执行周期选择
执行周期有(每天、每周、一次性任务)三种,(暂时)
以及选择开始执行时间到结束的时间段
在这里插入图片描述
当时选择到Other_Script的时候,可以选择脚本路径,和模块名字。(感觉这里应该使用上传脚本文件的方式实现。)但没有关系,只是在自己及公共盘上运行。
模块名称是路径脚本中的方法名字
在这里插入图片描述
上面的是基于线程的定时计划。

还有多进程的定时计划
在这里插入图片描述

脚本刷新

主要是用于重新导入py脚本文件。方便脚本选择的维护。

錯誤日志生成

目前針對id(時間戳)對日志進行日志輸出
在这里插入图片描述
在这里插入图片描述
針對輸出正常log的後續針對出現是否有錯誤log進行特定標識。

後續定時任務狀態的統計,因爲需要將定時任務狀態記錄以及log文件;
文件log的形式

後續

需要對每一個定時任務進行修改
周期:1.每天 2.每周 3.一次性任務

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值