1.安裝模塊python
pip install django-apscheduler
2.配置mysql
- django自帶數據庫在pycharm的配置 http://www.javashuo.com/article/p-flsdcyxg-nc.html
- INSTALLED_APPS中加入django-apscheduler應用
INSTALLED_APPS = [ ... 'django_apscheduler', ... ]
- 數據遷移
python manage.py migrate
3.查看配置結果sql
- django_apscheduler_djangojob:用於存儲任務的表格 job_state: 我猜是將任務具體的執行代碼和參數進行序列化後存在了這裏
- django_apscheduler_djangojobexecution:用於存儲任務執行狀態的表格 status: 執行狀態 duration: 執行了多長時間 exception: 是否出現了什麼異常
4.使用:在任意view.py中實現代碼數據庫
import time
from apscheduler.schedulers.background import BackgroundScheduler
from django.shortcuts import render
from django_apscheduler.jobstores import DjangoJobStore, register_job, register_events
from blog.robin_server.paramiko_test import SSHConnection
try: # 實例化調度器 scheduler = BackgroundScheduler() # 調度器使用DjangoJobStore() scheduler.add_jobstore(DjangoJobStore(), "default") # 設置定時任務,選擇方式爲interval,時間間隔爲10s # 另外一種方式爲天天固定時間執行任務,對應代碼爲: # @register_job(scheduler, 'cron', day_of_week='mon-fri', hour='9', minute='30', second='10',id='task_time') @register_job(scheduler, "interval", seconds=10, id="test_hjy") def my_job(): # 這裏寫你要執行的任務 obj = SSHConnection() obj.run() register_events(scheduler) scheduler.start() except Exception as e: print(e) # 有錯誤就中止定時器 scheduler.shutdown()
參數
- scheduler: 指定調度器
- trigger: 任務執行的方式,共有三種:'date'、'interval'、'cron'。
- 'date' + 'run_date' 的參數組合, 能實現單次任務。 例子:2019-07-07 22:49:00 執行任務
@register_job(scheduler, 'date', id='test', run_date='2019-07-07 22:49:00')
注:在親測時,執行完任務會報錯,緣由時執行完任務後會去mysql中刪除djangojob表中的任務。可是djangojobexecution表記錄着執行結果,有外鍵關聯着djangojob表,因此刪除時顯示有外鍵約束錯誤。可是任務會正常執行,執行以後也會正常刪除。 - 'interval' + 'hours' + 'minutes' + ..... 的參數組合,能實現間隔性任務。 例子:每隔3個半小時執行任務 還有seconds,days參數能夠選擇 注:若是任務須要執行10秒,而間隔設置爲1秒,它是不會給你開10個線程同時去執行10個任務的。它會錯過其餘任務直到當前任務完成。
- @register_job(scheduler, 'interval', id='test', hours=3, minutes=30)
- 'cron' + 'hour' + 'minute'+...的參數組合,能實現cron類的任務。 例子:天天的8點半執行任務 還有day,second,month等參數能夠選擇。
- @register_job(scheduler, 'cron', id='test', hour=8, minute=30)
- 'date' + 'run_date' 的參數組合, 能實現單次任務。 例子:2019-07-07 22:49:00 執行任務
- id: 任務的名字,不傳的話會自動生成。不過爲了以後對任務進行暫停、開啓、刪除等操做,建議給一個名字。而且是惟一的,若是多個任務取一個名字,以前的任務就會被覆蓋。
- args: list類型。執行代碼所須要的參數。
- next_run_time:datetime類型。開始執行時間。若是你如今建立一個定時任務,想3天后凌晨三點半自動給你女友發微信,那就須要這個參數了。
5.運行結果django