Django打开【定时任务】的最佳姿势
背景描述:
在基于Django的Web开发中,设置实现定时任务。
开发环境:Python + Django + 【django-apscheduler插件
实现定时任务】
具体步骤:
【前提条件】django-apscheduler插件
已经成功安装,开启正式使用环节:
1.新开一个应用app专门实现定时任务
python manage.py startapp app_my_apscheduler # 在项目中创建一个应用app,名叫app_my_apscheduler
2.修改【项目同名文件夹】下的settings.py文件,注册【新开app】
修改settings.py增加以下代码:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_apscheduler', # 新加入的定时任务插件django-apscheduler
'UserManger.apps.UsermangerConfig',
]
3.在【新开app】文件夹下创建对应的子路由urls.py文件,修改app_name为对应的【新开app】
创建【新开app】对应的子路由urls.py文件,在urls.py文件中增加以下代码:
from django.contrib import admin
from django.urls import path
from . import views
app_name = 'app_my_apscheduler' # 重点是这一行,改为对应的【新开app】
urlpatterns = []
4.修改【项目同名文件夹】下的urls.py文件,绑定【新开app】对应的子路由
修改【项目同名文件夹】下的主路由urls.py文件,在urlpatterns中增加以下代码:
urlpatterns = [
path('admin/', admin.site.urls),
path('app_my_apscheduler/', include('app_my_apscheduler.urls')), # 绑定【新开app】对应的子路由
]
5.在【新开app】文件夹下views.py中,增加你的定时任务代码
在【新开app】文件夹下views.py中,增加你的定时任务代码:
# # Create your views here.
from apscheduler.schedulers.background import BackgroundScheduler # 使用它可以使你的定时任务在后台运行
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
import time
print('django-apscheduler')
'''
date:在您希望在某个特定时间仅运行一次作业时使用
interval:当您要以固定的时间间隔运行作业时使用
cron:以crontab的方式运行定时任务
minutes:设置以分钟为单位的定时器
seconds:设置以秒为单位的定时器
'''
def my_job1(name): # 定义定时任务
# 定时每5秒执行一次
print('{} 任务运行成功!{}'.format(name,time.strftime("%Y-%m-%d %H:%M:%S")))
def my_job5(name):
# 具体要执行的代码
print('{} 任务运行成功!{}'.format(name,time.strftime("%Y-%m-%d %H:%M:%S")))
scheduler = BackgroundScheduler() # 创建定时任务的调度器对象——实例化调度器
# 调度器使用DjangoJobStore()
scheduler.add_jobstore(DjangoJobStore(), "default")
# 添加任务1
# 每隔5s执行这个任务
# @register_job(scheduler, "interval", seconds=5, args=['王路'], id='my_job1')
# @register_job(scheduler, 'cron', id='my_job1', seconds=5, args=['test'])
#scheduler.add_job(my_job1,"interval",seconds=10,args=['王飞'],id="my_job1")
scheduler.add_job(my_job5,"interval",seconds=10,args=['唐婉如'],id="my_job5")
scheduler.start() # 控制定时任务是否开启
"""
要实现对【新增定时任务】的增、删、改,通过控制`def my_job5(name)函数`来实现:
"""
(1)增:view.py文件中【复制新增 一个`def my_job5(name)函数`代码段】 + 【添加 定时任务scheduler.add_job(my_job5,"interval",seconds=10,args=['任务名称'],id="my_job5")`代码行】;
(2)删:view.py文件中【注释掉 刚刚新增的`def my_job5(name)函数`代码段】;
(3)改:view.py文件中【修改 刚刚新增的`def my_job5(name)函数`代码段】;
6.在终端执行python manage.py runserver命令,运行django项目
apscheduler定时任务会跟随django项目一起运行因此直接启动django即可。
python manage.py runserver
输出结果如下图所示: