1、前言
在开发当中我们或多或少都会有某个需求需要定时去执行。
在Django框架里我比较喜欢用django-apscheduler插件来实现Django中的定时任务。
2、django-apscheduler 介绍
它支持三种任务调度任务:
1.固定时间间隔
2.固定时间点
3.crontab命令
并且还支持异步执行、后台执行调度任务。
3、安装
pip install django-apscheduler
4、使用
4.1、修改配置文件settings.py
INSTALLED_APPS = [
"django_apscheduler"
]
4.2、迁移数据库
python manage.py migrate
# django-apscheduler会创建以下两张表来存储定时任务的信息
# django_apscheduler_djangojob
# django_apscheduler_djangojobexecution
5、示例
5.1、三种调度参数
date:希望在某个特定时间仅运行一次作业时使用
interval:要以固定的时间间隔运行作业时使用
cron:以crontab的方式运行定时任务
5.2、实例化对象
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
scheduler = BackgroundScheduler(timezone='Asia/Shanghai')
scheduler.add_jobstore(DjangoJobStore(), 'default')
5.3、使用装饰器@register_job
@register_job(scheduler, "date", id="timed_task1", run_date="2022-04-14 18:50:00")
def timed_task1(args):
"""
编写你的定时逻辑
"""
print(args)
@register_job(scheduler, "interval", id="timed_task2", minutes=30, args=[])
def timed_task2(args):
print(args)
@register_job(scheduler, "cron", id="timed_task3", hour=9, args=[])
def timed_task3(args):
print(args)
5.4、使用add_job函数
def add_timed_task(request):
json_body = json.loads(request.body.decode())
try:
start_time = json_body['start_time']
start_time = start_time.split(':')
hour = int(start_time[0])
minute = int(start_time[1])
second = int(start_time[2])
args = json_body['data']
kwargs = {
"username": username,
"password": password,
}
scheduler.add_job(timed_task, 'cron', hour=hour, minute=minute, second=second, args=[args, kwargs])
except Exception as e:
print(e)
return JsonResponse({"code":"xx", "message":""})
def timed_task(args, kwargs):
print(".......")
register_events(scheduler)
scheduler.start()
"""
使用add_job函数可以前端传json参数来生成定时任务
使用那种模式添加定时任务,取决于你自己的需求和场景!!!
"""
5.5、 启动定时任务
# apscheduler定时任务会跟随django项目一起运行因此直接启动django即可
python manage.py runserver
6、拓展
6.1、调度器提供的种类
1. BlockingScheduler : 调度器在当前进程的主线程中运行,也就是会阻塞当前线程。
2. BackgroundScheduler : 调度器在后台线程中运行,不会阻塞当前线程。(Django框架使用)
3. AsyncIOScheduler : 结合 asyncio 模块(一个异步框架)一起使用。
4. GeventScheduler : 程序中使用 gevent(高性能的Python并发框架)作为IO模型,和 - GeventExecutor 配合使用。
5. TornadoScheduler : 程序中使用 Tornado(一个web框架)的IO模型,用 ioloop.add_timeout 完成定时唤醒。
6. TwistedScheduler : 配合 TwistedExecutor,用 reactor.callLater 完成定时唤醒。scrapy爬虫框架
7. QtScheduler : 你的应用是一个 Qt 应用,需使用QTimer完成定时唤醒
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?