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'來判斷

總結,以上各種方式各有優劣,加鎖需要維護鎖狀態,避免死鎖。可以根據具體環境來進行選用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM