这期内容当中小编将会给大家带来有关django中如何使用apscheduler,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。定时任务是分布式任务的一种特殊类型的任务。Django的分布式主要由Celery框架实现,这是python开发的分布式任务队列。由于它本身不支持消息存储服务,所以需要第三方消息服务来传递任务,一般使用Redis。优点:Celery侧重于实时操作,可用于生产系统每天处理数以百万计的任务,可用于大型项目。可在分布的机器、进程、线程上执行任务调度。缺点:配置和使用较为复杂,需要Redis数据库和多个python第三方库。只需要下载一个 django-crontab 包就可以使用cron表达式在Django框架中设置定时任务。本人对这种方法了解不多,不过这种方法好像不支持windows系统,功能也相对简单。配置简单、功能齐全、使用灵活、支持windows和linux,适合中小型项目。django-apscheduler中相关的概念和python的定时任务框架apscheduler中的概念是一样的,有感兴趣的同学可以自行查阅。(本文使用 django + mysql 架构)先在settings.py中配置好数据库信息(略).在INSTALLED_APPS中加入django-apscheduler应用:
用于存储任务的表格
job_state: 我猜是将任务具体的执行代码和参数进行序列化后存在了这里
用于存储任务执行状态的表格
status: 执行状态
duration: 执行了多长时间
exception: 是否出现了什么异常大概有两种创建任务的方法:装饰器和add_job函数。在任意view.py中实现代码(我习惯新开一个app专门实现定时任务):
scheduler: 指定调度器trigger: 任务执行的方式,共有三种:’date’、’interval’、’cron’。’date’ + ‘run_date’ 的参数组合, 能实现单次任务。
例子:2019-07-07 22:49:00 执行任务@register_job(scheduler, 'date', id='test', run_date='2019-07-07 22:49:00')
注:在亲测时,执行完任务会报错,原因时执行完任务后会去mysql中删除djangojob表中的任务。但是djangojobexecution表记录着执行结果,有外键关联着djangojob表,所以删除时显示有外键约束错误。但是任务会正常执行,执行之后也会正常删除。’interval’ + ‘hours’ + ‘minutes’ + ….. 的参数组合,能实现间隔性任务。
例子:每隔3个半小时执行任务
还有seconds,days参数可以选择
注:如果任务需要执行10秒,而间隔设置为1秒,它是不会给你开10个线程同时去执行10个任务的。它会错过其他任务直到当前任务完成。
‘cron’ + ‘hour’ + ‘minute’+…的参数组合,能实现cron类的任务。
例子:每天的8点半执行任务
还有day,second,month等参数可以选择。
id: 任务的名字,不传的话会自动生成。不过为了之后对任务进行暂停、开启、删除等操作,建议给一个名字。并且是唯一的,如果多个任务取一个名字,之前的任务就会被覆盖。args: list类型。执行代码所需要的参数。next_run_time:datetime类型。开始执行时间。如果你现在创建一个定时任务,想3天后凌晨三点半自动给你女朋友发微信,那就需要这个参数了。还有些其他的参数感兴趣的同学可以查看源代码来了解。装饰器的方法适合于写代码的人自己创建任务,如果想让用户通过页面输入参数,并提交来手动创建定时任务,就需要使用add_job函数。
下面这个小例子,前端传递json数据给后端,触发test_add_task函数,来添加任务:
和装饰器的参数大同小异,只是第一个参数不同。
如果具体要执行的函数和调用它的函数在一个文件中,那么只需要传递这个函数名就可以了(如上面的例子)。
但是我习惯将具体的业务代码写到另外一个文件中,view.py中 香港云主机只写前后端交互的接口函数,这种情况下传递的参数为一个字符串,格式为:’package.module:some.object’,即 包名.模块:函数名django-apscheduler框架还提供了很多操作定时任务的函数。比如:删除任务scheduler.remove_job(job_name)
暂停任务scheduler.pause_job(job_name)
开启任务scheduler.resume_job(job_name)
修改任务scheduler.modify_job(job_name)
注:修改任务只能修改参数,如果要修改执行时间的话,就把任务删了重新创建。可以在页面上做一个这样的表格,再加上简单的前后端交互就可以让用户自行管理定时任务:上述就是小编为大家分享的django中如何使用apscheduler了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注开发云行业资讯频道。
[TOC]txid:namenode对每个操作事件(增删改操作)都给了一个唯一的id标识,称为txid,一般是从0开始自增,每多一个操作,txid就自增1。fsimage:是namenode在内存中的元数据在本地磁盘的一个镜像文件,但是通常情况fsimage并…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。