django中如何使用apscheduler

发布时间:2021-07-30 16:12:35 作者:Leah
来源:亿速云 阅读:257

这期内容当中小编将会给大家带来有关django中如何使用apscheduler,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Celery框架

定时任务是分布式任务的一种特殊类型的任务。Django的分布式主要由Celery框架实现,这是python开发的分布式任务队列。由于它本身不支持消息存储服务,所以需要第三方消息服务来传递任务,一般使用Redis

优点:

  1. Celery侧重于实时操作,可用于生产系统每天处理数以百万计的任务,可用于大型项目。

  2. 可在分布的机器、进程、线程上执行任务调度。

缺点:

配置和使用较为复杂,需要Redis数据库和多个python第三方库。

django-crontab

只需要下载一个 django-crontab 包就可以使用cron表达式在Django框架中设置定时任务。本人对这种方法了解不多,不过这种方法好像不支持windows系统,功能也相对简单。

django-apscheduler

配置简单、功能齐全、使用灵活、支持windows和linux,适合中小型项目。

使用方法

django-apscheduler中相关的概念和python的定时任务框架apscheduler中的概念是一样的,有感兴趣的同学可以自行查阅。

(本文使用 django + mysql 架构)

安装模块

pip install django-apscheduler
复制代码

配置

  1. 先在settings.py中配置好数据库信息(略).

  2. INSTALLED_APPS中加入django-apscheduler应用:

    INSTALLED_APPS = [        ...        'django_apscheduler',        ...    ]
执行迁移
python manage.py migrate
去数据库中看一看,生成了两个表格,大部分都顾名思义。
1. django_apscheduler_djangojob

用于存储任务的表格

django中如何使用apscheduler

job_state: 我猜是将任务具体的执行代码和参数进行序列化后存在了这里

2. django_apscheduler_djangojobexecution

用于存储任务执行状态的表格

django中如何使用apscheduler

status: 执行状态
duration: 执行了多长时间
exception: 是否出现了什么异常

使用

创建任务

大概有两种创建任务的方法:装饰器和add_job函数。

1. 装饰器

在任意view.py中实现代码(我习惯新开一个app专门实现定时任务):


from apscheduler.schedulers.background import BackgroundSchedulerfrom django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
# 实例化调度器scheduler = BackgroundScheduler()# 调度器使用默认的DjangoJobStore()scheduler.add_jobstore(DjangoJobStore(), 'default')
# 每天8点半执行这个任务@register_job(scheduler, 'cron', id='test', hour=8, minute=30,args=['test'])def test(s):    # 具体要执行的代码    pass
# 注册定时任务并开始register_events(scheduler)scheduler.start()
启动服务 python manage.py runserver 这个任务就会被存储到django_apscheduler_djangojob表中,并按照设置定时的执行程序。
参数

还有些其他的参数感兴趣的同学可以查看源代码来了解。

2. add_job函数

装饰器的方法适合于写代码的人自己创建任务,如果想让用户通过页面输入参数,并提交来手动创建定时任务,就需要使用add_job函数。
下面这个小例子,前端传递json数据给后端,触发test_add_task函数,来添加任务:


import jsonfrom django.http import JsonResponsefrom apscheduler.schedulers.background import BackgroundSchedulerfrom django_apscheduler.jobstores import DjangoJobStore, register_events, register_job

scheduler = BackgroundScheduler()scheduler.add_jobstore(DjangoJobStore(), 'default')


# 与前端的接口
def test_add_task(request):    if request.method == 'POST':        content = json.loads(request.body.decode())  # 接收参数        try:            start_time = content['start_time']  # 用户输入的任务开始时间, '10:00:00'            start_time = start_time.split(':')            hour = int(start_time)[0]            minute = int(start_time)[1]            second = int(start_time)[2]            s = content['s']  # 接收执行任务的各种参数            # 创建任务            scheduler.add_job(test, 'cron', hour=hour, minute=minute, second=second, args=[s])            code = '200'            message = 'success'        except Exception as e:            code = '400'            message = e                    back = {            'code': code,            'message': message        }        return JsonResponse(json.dumps(data, ensure_ascii=False), safe=False)

# 具体要执行的代码
def test(s):    pass    
register_events(scheduler)scheduler.start()
这样就可以由前端用户来手动设置定时任务了。
参数

和装饰器的参数大同小异,只是第一个参数不同。
如果具体要执行的函数和调用它的函数在一个文件中,那么只需要传递这个函数名就可以了(如上面的例子)。
但是我习惯将具体的业务代码写到另外一个文件中,view.py中只写前后端交互的接口函数,这种情况下传递的参数为一个字符串,格式为:'package.module:some.object',即 包名.模块:函数名

其他功能

django-apscheduler框架还提供了很多操作定时任务的函数。比如:

可以在页面上做一个这样的表格,再加上简单的前后端交互就可以让用户自行管理定时任务:

django中如何使用apscheduler

上述就是小编为大家分享的django中如何使用apscheduler了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 在django中使用apscheduler 执行计划任务的实现方法
  2. 在django-xadmin中APScheduler启动初始化的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

codesnippet django

上一篇:maven中如何使用聚合模块

下一篇:HttpComponents中如何使用HttpClient连接池

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》