pip install apscheduler
# myapp/scheduler.py
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
# myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'
# myapp/apps.py
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'myapp'
def ready(self):
# 引入任务脚本,设置定时任务
from myapp import scheduler
from myapp.task import task_func
scheduler.add_job(func=task_func, trigger='interval', minutes=30)
scheduler.start()
# myapp/task.py
def task_func():
print("定时任务执行了!")
# settings.py
# 将myapp注册为Django的app
INSTALLED_APPS = [
# ...
'myapp',
]
# APscheduler配置,设置为Django的default timezoen
SCHEDULER_TIMEZONE = 'Asia/Shanghai'
# 定义一个定时任务执行器
SCHEDULER_EXECUTORS = {
'default': {
'class': 'apscheduler.executors.pool:ThreadPoolExecutor',
'max_workers': '3'
}
}
# 定义一个定时任务触发器
SCHEDULER_JOB_DEFAULTS = {
'coalesce': False,
'max_instances': 3,
'misfire_grace_time': 30
}
# 应用定时任务
from apscheduler.schedulers.background import BackgroundScheduler
from django.conf import settings
scheduler = BackgroundScheduler(timezone=getattr(settings, 'SCHEDULER_TIMEZONE', 'UTC'),
executors=getattr(settings, 'SCHEDULER_EXECUTORS', None),
job_defaults=getattr(settings, 'SCHEDULER_JOB_DEFAULTS', None))
如果一切正常,您应该能够看到定时任务期望的输出。