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

Flask中使用APScheduler时函数重复执行两次的解决方法

Flask中APScheduler任务重复执行两次的解决办法

最常见的根源是Flask调试模式的自动重载机制——调试模式下Flask会启动主进程和重载进程两个实例,导致调度器被初始化两次,任务也被重复注册。另外,代码重复导入、多次初始化调度器也会引发这个问题。以下是具体解决方法:

  • 关闭调试模式:如果不需要调试功能,启动应用时直接设置debug=False,避免双进程启动。
  • 仅在主进程初始化调度器:利用Flask的环境变量判断主进程,确保调度器只启动一次:
    from flask import Flask
    from apscheduler.schedulers.background import BackgroundScheduler
    import os
    
    app = Flask(__name__)
    
    def hello():
        print("hello")
    
    if __name__ == '__main__':
        # 仅主进程启动调度器
        if not app.debug or os.environ.get('WERKZEUG_RUN_MAIN') == 'true':
            scheduler = BackgroundScheduler()
            scheduler.add_job(hello, "cron", id="month", minute="*", hour="*")
            scheduler.start()
        app.run(debug=True)
    
  • 避免重复注册任务:改用add_job方法并添加replace_existing=True参数,即使重复添加也会覆盖原有任务,防止重复执行:
    scheduler.add_job(hello, "cron", id="month", minute="*", hour="*", replace_existing=True)
    
  • 检查重复初始化:排查代码中是否在其他模块(如蓝图、工具类)重复创建了BackgroundScheduler实例并启动,确保全局只有一个调度器实例。

内容的提问来源于stack exchange,提问作者Michael Coleman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:54:56