zoukankan      html  css  js  c++  java
  • gunicorn部署flask项目apscheduler重复执行定时任务解决方案

    1.gunicorn启动配置中增加–preload
    2.全局锁确保实例化apscheduler只运行一次,文件锁/端口锁/redis/mysql等数据库锁均可,可能导致无法使用modify_job编辑任务
    3.add_job(func=add_job_xxx,...)时,在add_job_xxx中实现加锁逻辑保证任务只运行一次,文件锁/端口锁/redis/mysql等数据库锁均可,可以正常使用modify_job编辑任务
    4.实例化apscheduler时,增加父进程ID判断,if os.getppid() == 1来判断,可能导致无法使用modify_job编辑任务。(sysytemd管理服务时init进程ID为1)
    5.思路就是区分Mster进程与Worker进程来加锁,可以通过if os.environ.get('WERKZEUG_RUN_MAIN') == 'true'来判断

    总结,以上各种方式各有优劣,加锁需要维护锁状态,避免死锁。可以根据具体环境来进行选用。

    Copyright © 2021 Primzahl. All rights reserved.

  • 相关阅读:
    干将莫邪
    Rancher
    Rancher 1.6 版本 只能在 linux 下用
    野蛮人大作战
    Oracle
    Gradle
    正则表达式 我遇到的
    Redis
    NestJS 用TypeScript开发 nodeJS后端
    Koa2
  • 原文地址:https://www.cnblogs.com/Primzahl/p/14006024.html
Copyright © 2011-2022 走看看