Django--定时任务apscheduler的使用
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()