淘先锋技术网

首页 1 2 3 4 5 6 7

apscheduler定时任务的使用

在写一个兴趣班教务管理的小程序时,使用了Django后台来管理数据库,由于每天要根据现有设定的班级进行课表的更新,所以需要一个定时器,但是开发环境是在windows上,后台部署在linux上,问了chatGPT,说是apscheduer支持跨平台使用,然后就选了这个,以下是使用过程,按chatGPT给的代码,一次成功,比百度出来的效果好多了。

1、安装包

pip install apscheduler

2、配置settings.py

# settings.py

INSTALLED_APPS = [
    # other apps
    'django_apscheduler',
]

# Configure the Django APScheduler
SCHEDULER_API_ENABLED = True

3、在manage.py的文件同级目录下创建文件scheduler.py

# scheduler.py

from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
from datetime import datetime, timedelta
from django.contrib.auth.models import User

# Create a scheduler
scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")
register_events(scheduler)

# Define the task functions
def count_users():
    user_count = User.objects.count()
    print(f"Total number of users: {user_count}")

def update_database():
    # Update database logic here
    pass

# 在7天后这个时间,执行一下任务,run_date只是一次,所以只会执行一次
# Register the task functions with the scheduler
@register_job(scheduler, "date", run_date=datetime.now() + timedelta(days=7), id="count_users_job", replace_existing=True)
def count_users_job():
    count_users()
# 这个没有指定哪天,只是指定小时,所以会在每天的12点,执行这个任务
@register_job(scheduler, "cron", hour=12, id="update_database_job", replace_existing=True)
def update_database_job():
    update_database()

4、在项目的urls.py中调用这个定时计划

# urls.py

from django.urls import path
from .scheduler import scheduler

urlpatterns = [
    # other URL patterns
]

# Start the scheduler
scheduler.start()

5、然后启动项目 python manage.py runserver,在admin中查看就能看到你的定时任务及执行的时间了,下面以我的定时任务为例看一下图片

在这里插入图片描述