在我們開發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重啟,或者重新啟動相關的服務,我們的定時任務都會繼續跑,
這樣我們無論怎么去部署我們的服務都可以做到持久化。