正在进入ing...

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.pyINSTALLED_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秒会在控制台打印出”我是定时任务“这样的内容。