Django结合apscheduler进行定时任务设定
发布时间:2022-09-02
浏览量: 750
文章分类: python
关于apscheduler
这个库,可以在python
中单独使用,也可以整合到django
中使用,真的非常方便,关于单独使用,可以看我的这篇文章:python使用apscheduler制作定时任务-佩恩的博客),今天着重说一下引入Django
的文章
版本
python3.8.13
APScheduler 3.9.1
Django 4.1
django-apscheduler 0.6.2
下面所有代码都是在上面的基础上进行运行的。
使用
给Django
注册一个新的app
执行命令python manage.py startapp app01
,然后注册到settings.py
中
将Apscheduler
整合进项目
在django
项目的settings.py
的INSTALLED_APPS
里面。
完成后如下
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"django_apscheduler", # 注册django_apschjeduler
"app01" # 我们前面创建的app
]
进行数据库迁移
执行python manage.py migrate
后留意下面的提示
Applying django_apscheduler.0008_remove_djangojobexecution_started... OK
Applying django_apscheduler.0009_djangojobexecution_unique_job_executions... OK
执行后会帮我们自动创建2张表,用来记录任务和执行结果
添加定时任务
将app01.views.py
修改为如下内容。
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_job
# 1.实例化调度器
scheduler = BackgroundScheduler()
# 2.调度器使用DjangoJobStore()
scheduler.add_jobstore(DjangoJobStore(), "default")
# 3.设置定时任务,选择方式为interval,时间间隔为10s
# 另一种方式为每天固定时间执行任务,对应代码为:
# @register_job(scheduler, 'cron', hour='9', minute='30', second='10',id='task_time')
try:
@register_job(scheduler, "interval", seconds=10, replace_existing=True)
def my_job():
# 这里写你要执行的任务
print('我是定时任务')
except Exception as e:
print(e)
# 遇到错误,停止定时器
scheduler.shutdown()
# 4.开启定时任务
scheduler.start()
在项目的urls.py
文件引入上面修改的views.py
文件(无需注册路由)
from django.contrib import admin
from django.urls import path
from app01 import views # 只要这里引入即可
urlpatterns = [
path("admin/", admin.site.urls),
]
然后执行python manage.py runserver
即可看到每10秒会在控制台打印出”我是定时任务“这样的内容。