flask+apscheduler+redis實現定時任務持久化


 

 

   在我們開發flask的時候,我們會結合apscheduler實現定時任務,我們部署到服務器上,會不會遇到這樣的問題,每次我們部署后,我們重啟服務后,原來的定時任務都需要重啟,這樣對我們經常迭代的項目肯定是不行的,那么我們應該怎么做呢,其實我們可以根據apscheduler的官方文檔結合redis來做持久化,我們為何選擇redis,現在很多公司在用,整體的效果還是不錯的。

那么我們怎么來實現呢。

首先在本地安裝redis,其次在我們的配置文件去配置

from apscheduler.jobstores.redis import RedisJobStore
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
jobstores = {
    'redis': RedisJobStore(),用redis作backend
}
executors = {
    'default': ThreadPoolExecutor(10),#默認線程數
    'processpool': ProcessPoolExecutor(3)#默認進程
}

然后我們在app的的的文件做如下:

from apscheduler.schedulers.background import BackgroundScheduler
sched = BackgroundScheduler(jobstores=jobstores, executors=executors)

然后我們啟動

sched.start()

這樣我們使用flask+apscheduler+redis持久化我們實現了部分完畢,接下來,我們就是用調用sched去實現我們的job的操作。
sched.add_job(func=addtask,id=str(id),args=[str(id)],trigger='cron',day_of_week=day_week,hour=hour,minute=mindes,jobstore='redis',replace_existing=True)

啟動我們的job

我們在可視化的redis可以看到

 

我們可以打開表來看下

這就是我們的實現的job,這樣無論我們怎么去啟動我們的服務,我們的定時的任務都會一直在,

在更新到阿里雲服務器后,我試着對nginx重啟,或者重新啟動相關的服務,我們的定時任務都會繼續跑,

這樣我們無論怎么去部署我們的服務都可以做到持久化。

 


免責聲明!

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



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