1.安裝模塊
pip install django-apscheduler
2.配置
- django自帶數據庫在pycharm的配置 https://blog.csdn.net/weixin_44200535/article/details/87906800
- INSTALLED_APPS中加入django-apscheduler應用
INSTALLED_APPS = [ ... 'django_apscheduler', ... ]
- 數據遷移
python manage.py migrate
3.查看配置結果
- 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.運行結果