APScheduler(Advanced Python Scheduler)是一個輕量級的Python定時任務調度框架(Python庫)。django-apscheduler的github鏈接https://github.com/jarekwg/django-apscheduler,可以通過github中的示例學習django-apschedule人的使用:
django-apscheduler是在apscheduler的基礎上針對django框架開發的一個插件:
This little wrapper around APScheduler enables storing persistent jobs in the database using Django’s ORM rather than requiring SQLAlchemy or some other bloatware.
Features in this project:
- Work on both python2.* and python3+
- .Manage jobs from Django admin interface
- Monitor your job execution status: duration, exception, traceback, input parameters.
支持python2以及python3+,能夠管理job和監控job的執行狀態,可以在數據庫中持久化存儲job。
django-apscheduler在Django框架中使用
1.1 需要安裝的包
pip install django_apscheduler
pip install apscheduler
1.2 修改django的配置
在django的配置文件settings.py中的INSTALLED_APPS中添加子應用’django_apscheduler’。
INSTALLED_APPS = [
'django_apscheduler']
然後,執行遷移文件,更新數據庫
# 執行遷移文件,更新數據庫
python manage.py migrate
查看數據庫,數據庫中會新生成兩個表分別爲:django_apscheduler_djangojob和django_apscheduler_djangojobexecution
django_apscheduler_djangojob表結構和任務執行後數據記錄
django_apscheduler_djangojobexecution表結構和任務執行後數據記錄
1.3 編寫定時任務
定時任務的示例如下,在django項目中的任意子應用的視圖view.py文件中添加定時任務,項目啓動之後,定時任務會自動執行。
import time
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")
# 時間間隔3秒鐘打印一次當前的時間
@register_job(scheduler, "interval", seconds=3, id='test_job')
def test_job():
format_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
print(format_time)
# per-execution monitoring, call register_events on your scheduler
register_events(scheduler)
scheduler.start()
print("Scheduler started!")
apscheduler的文檔地址:https://apscheduler.readthedocs.io/en/latest/userguide.html,github地址:https://github.com/agronholm/apscheduler,參數的設置,更多內容的學習,可以參考文檔的內容部分,參數的設置可以參考博文:http://www.chenxm.cc/article/829.html
apsheduler的簡單用例:
from apscheduler.schedulers.blocking import BlockingScheduler
import time
# 定時的任務,打印當前的時間
def test():
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
scheduler = BlockingScheduler()
# 時間間隔5秒
scheduler.add_job(test, trigger='interval', seconds=5, id='test')
scheduler.start()
apsheduler內置的觸發器trigger有三種:
date 日期:觸發任務運行的具體日期(只運行一次)
interval 間隔:觸發任務運行的時間間隔
cron 週期:觸發任務運行的週期(週期性運行)
django-apscheduler和apscheduler的參數設置基本類似,可以互相參考。