0
点赞
收藏
分享

微信扫一扫

Django打开【定时任务】的最佳姿势

cwq聖泉寒江2020 2022-03-11 阅读 64

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

输出结果如下图所示:
在这里插入图片描述

举报

相关推荐

0 条评论