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.

  • 相关阅读:
    docker 部署 zabbix
    docker 搭建私有云仓库
    doeker部署zabbix
    LVS
    zabbix安装与配置
    keepalive
    Shell编程(5)
    Shell编程(4)
    Shell编程(3)
    几种Toast用法
  • 原文地址:https://www.cnblogs.com/Primzahl/p/14006024.html
Copyright © 2011-2022 走看看