【实验内容】
本实验主要介绍在Django框架中使用APScheduler第三方库实现对数据的定时采集。
【实验目的】
1、掌握APScheduler库的使用;
2、学习在Django中实现多个定时任务调度;
【实验步骤】
步骤1 Apscheduler简介与特点
步骤2 Apscheduler基本概念
步骤3 在Django中实现多个定时任务调度
步骤1:Apscheduler简介与特点
(1) 简介
APScheduler(Advanced Python Scheduler)是一个用于 Python 的灵活的定时任务调度库。它允许您在应用程序中安排执行函数或方法,以便在指定的时间间隔、日期、天或其他规则触发它们。
(2) 特点
- 多种触发器:APScheduler支持多种触发器,包括日期时间触发、定时间隔触发、固定日期触发、定时器触发和 Cron
触发等。这使得您可以为不同的任务定义不同的触发规则。 - 可扩展性:它允许您创建多个定时任务,定义自己的触发器和任务,并将其集成到您的应用程序中。
- 并发控制:APScheduler可以管理并发执行的任务,确保任务不会重叠执行。
- 持久化存储:您可以将任务存储在持久化存储中,以便在应用程序重启时保持任务状态。
- 灵活性:APScheduler提供了多种方式来调度任务,如在单线程应用程序中,通过线程池或进程池,以及在分布式系统中。
- 轻量级:APScheduler是一个轻量级库,易于集成到各种类型的 Python 应用程序中。
- 支持异步:它还支持在异步应用程序中使用,例如基于asyncio的Python应用。
步骤二:Apscheduler基本概念
(1) 调度器(scheduler)
/========================================================================================================/
使用示例:
-***********************************************************************
(2) 作业存储(job store)
/===================================================================================================/
(3) 执行器(executer)
在APScheduler中,执行器(Executor)是用于执行调度的组件。执行器负责管理调度的任务,并决定何时以及如何执行它们。APScheduler提供了不同类型的执行器,以满足不同的需求。
/===============================================================================================/
使用示例:
-***********************************************************************
(4) 触发器(trigger)
-**************************************************************************
步骤3:在Django中实现多个定时任务调度
(1) 安装
pip install django-xxxxx
(2) 注册app
在settings.py中注册按如下图所示注册app。
-***************************************************************************
(3) 数据库连接配置
/==================================================================================================/
-***************************************************************************
运行python manage.py migrate
会自动生成下列2表:创建超级用户后可直接进入后台管理任务调度,如下图所示:
-**********************************************************************
(4) 创建定时任务
以湖北为例
-**********************************************************************
导入BackgroundScheduler类,这是APScheduler中用于在应用程序的后台运行的调度器。通过调用start()方法,启动后台调度器。使用了DjangoJobStore作为任务存储(jobstore)。/==============
===========================================================================================/
-*********************************************************************
使用 ThreadPoolExecutor并发执行多个任务,提高效率。在上述代码中,并发执行了两个任务
/==============================================================/
这是一个运行指定目录文件下的采集数据脚本的函数 run_program。
命令行执行:/==================================
=======/
重试机制:使用 retries 变量实现了一个简单的重试机制,即如果命令执行失败,会进行最多两次的重试。这有助于应对一些暂时性的问题。
错误处理: /===================================
=========/
-**************************************************************************
将文件运行的结果存储到数据库中
-**************************************************************************
(5) 定时运行结果
定时任务执行记录,如下图所示脚本执行记录
-**********************************************************************************