【python】【flask】 flask_apscheduler运行两次的问题解决

项目场景:

公司部署了centos 服务器,使用flask 框架来快速部署api,需要在脚本flask 功能里面做一个定时的操作


问题描述

发现定时时间到的时候会运行两次,百度查询很多的文章,使用的方法是吧debug=False,或者reload=False 等设置的操作,发现不一定能起到作用,反而可能导致其他的问题出现

#我的代码,定时做一些数据库的操作,虽然数据有触发器但是懒得查询了。。。
@scheduler.task('interval', id='do_job_1', seconds=60 * 60 * 7, misfire_grace_time=900)
def do_s():
    loguru.logger.warning('adsfasfasdf')# 运行过程会出现连续打印两次的情况
    domysql.del_day_data()

原因分析:

具体的原因很可能是时间到的时候被实例化了多次的原因导致的。


解决方案:

如果是多次实例化的原因导致的话,那我们可以使用单例来实现避免多次运行和实例化导致这样的情况出现

my_scheduler.py

# 具体的python 单例的方法可以去查询,有多种方法可行,下面是使用new 的方法来实现单例的
from flask_apscheduler import APScheduler
class MyScheduler(object):
    _instance = None # 初始值
    APScheduler = None # 初始值

    def __new__(cls, *args, **kw):
        if cls._instance is None:
        	# 第一次初始的时候None ,就做初始化的操作,如果不是第一次就返回第一次生成的对象
            cls.APScheduler = APScheduler()
            cls._instance = object.__new__(cls, *args, **kw)
        return cls._instance

    def __init__(self):
        pass


scheduler = Scheduler().APScheduler # 暴露,方便后续的引用

#在flask 里面的使用如下:
# coding=utf-8
# 作者:Administrator
# 创建时间:2022 2022/7/12 9:10
# IDE:PyCharm
# 描述:接口的编写,可能后期的网站也需要做

import json
import os
from flask import Flask, request
from my_scheduler import scheduler


app = Flask(__name__, template_folder='templates')
client = MyRedis()
myredis = client.conn
#定时任务,7个小时做函数里面的操作,这样就不会出现多次运行定时任务的情况
@scheduler.task('interval', id='do_job_1', seconds=60 * 60 * 7, misfire_grace_time=900)
def do_s():
    loguru.logger.warning('adsfasfasdf')# 运行过程会出现连续打印两次的情况
    domysql.del_day_data()

class Config(object):
    SCHEDULER_API_ENABLED = True# 可以 IP:5000/scheduler 查看所有的=定时任务内容



if __name__ == '__main__':
    app.config.from_object(Config())
    scheduler.init_app(app)
    scheduler.start()
    app.run(host=‘localhost’, port=5000)

  • 单例:可以在很多方便可以使用,后续学习一下。
  • 点赞关注一下吧!!!!!!!!!!!!
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask_Apscheduler 是一个用于在 Flask 网络应用中集成定时任务调度的插件。它基于 Apscheduler,提供了一种简单方便的方式来配置和管理后台任务。 使用 Flask_Apscheduler,我们可以在 Flask 应用中轻松地创建和管理任务,例如定时执行任务、周期性地执行任务等等。它允许我们根据需求灵活地配置任务的触发器,例如可以通过 cron 表达式来指定任务的定时执行。 首先,我们需要在 Flask 应用中导入 Flask_Apscheduler 扩展。然后,我们可以通过定义一个任务函数来创建任务,通过装饰器 @scheduler.task 来注册任务,并在任务函数中编写具体的执行逻辑。 除了创建任务外,我们还可以使用 Flask_Apscheduler 提供的其他功能,例如获取任务列表、启动任务调度器、关闭任务调度器、暂停或恢复任务等等。使用 Flask_Apscheduler 可以让我们更方便地管理和调度各种任务。 需要注意的是,Flask_Apscheduler 是一个扩展,需要安装 Apscheduler 才能正常使用。在安装完依赖后,我们可以在 Flask 应用中配置调度器的参数,例如任务存储方式、任务并发数等等。配置完成后,我们可以在应用中通过调用 Flask_Apscheduler 提供的方法来创建任务,并通过启动调度器来让任务按照预定的策略执行。 总的来说,Flask_Apscheduler 是一个强大的定时任务调度工具,可以与 Flask 网络应用无缝集成,帮助我们更方便地管理后台任务,并提供了多种配置选项来满足不同需求。它的使用简单,功能强大,是开发 Flask 应用中不可缺少的一部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值