详解django中使用定时任务的方法


Posted in Python onSeptember 27, 2018

今天介绍在django中使用定时任务的两种方式。

方式一: APScheduler

1)安装:

pip install apscheduler

2)使用:

from apscheduler.scheduler import Scheduler
from django.core.cache import cache
# 实例化
sched = Scheduler()  
 
# 每30秒执行一次
@sched.interval_schedule(seconds=30)
def sched_test():
  """
  测试-定时将随机数保存到redis中
  :return:
  """
  seed = "123456789"
  sa = []
  for i in range(4):
    sa.append(random.choice(seed))
  code = ''.join(sa)
  cache.set("test_"+code, code)

3)启动定时任务

# 启动定时任务

sched.start()

方式二: django-crontab

1) 安装:

pip install django-crontab

2) 添加配置到INSTALL_APPS中

INSTALLED_APPS = (
'django_crontab',
)

3) 编写定时函数:

在django的app中新建一个test_crontab.py文件,把需要定时执行的代码放进去

import random
 
from django.core.cache import cache
 
def test():
  """
  测试-定时将随机数保存到redis中
  :return:
  """
  seed = "123456789"
  sa = []
  for i in range(4):
    sa.append(random.choice(seed))
  code = ''.join(sa)
  cache.set("test_"+code, code)

4)编写定时命令

Django为项目中每一个应用下的management/commands目录中名字没有以下划线开始的Python模块都注册了一个manage.py命令, 自定义一个命令如下: 必须定义一个继承自BaseCommand的Command类, 并实现handle方法。

编写appname/management/commands/test.py文件

import random
 
from django.core.management.base import BaseCommand
from django.core.cache import cache
 
class Command(BaseCommand):
  """
  自定义命令
  """
  def handle(self, *args, **options):
    """
    自定义命令
    :return:
    """
    seed = "123456789"
    sa = []
    for i in range(4):
      sa.append(random.choice(seed))
    code = ''.join(sa)
    cache.set("test_"+code, code)

定义完成后,执行python manage.py test, 会执行handle()函数

5) 在settings.py中增加配置

# 运行定时函数
CRONJOBS = [
  ('*/1 * * * *', 'appname.test_crontab.test','>>/home/python/test_crontab.log')
]
 
# 运行定时命令
CRONJOBS = [
  ('*/1 * * * *', 'django.core.management.call_command', ['test'], {}, '>> /home/python/test.log'),
]

上面主要有3个参数,分别表示: 定时任务执行时间(间隔), 待执行定时任务, 将定时任务的信息追加到文件中
对于熟悉linux中定时任务crontab的同学可能对上面第一个参数的语法很亲切。上面表示每隔1分钟执行一次代码。

linux中的定时任务crontab的语法如下:

* * * * * command
分钟(0-59) 小时(0-23) 每个月的哪一天(1-31) 月份(1-12) 周几(0-6) shell脚本或者命令

例子:

0 6 * * * commands >> /tmp/test.log # 每天早上6点执行, 并将信息追加到test.log中
0 */2 * * * commands # 每隔2小时执行一次

有兴趣的小伙伴可以深入研究下linux的crontab定时任务。

6) 添加并启动定时任务

python manage.py crontab add

其它命令:

python manage.py crontab show: 显示当前的定时任务
python manage.py crontab remove: 删除所有定时任务

今天的定时任务就说到这里,有错误之处,欢迎交流指正!

Python 相关文章推荐
Python-基础-入门 简介
Aug 09 Python
Python3实现从指定路径查找文件的方法
May 22 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 Python
python监控文件并且发送告警邮件
Jun 21 Python
Flask-WTF表单的使用方法
Jul 12 Python
Django继承自带user表并重写的例子
Nov 18 Python
PyCharm如何导入python项目的方法
Feb 06 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 Python
Python高级特性切片(Slice)操作详解
Sep 27 #Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 #Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 #Python
APIStar:一个专为Python3设计的API框架
Sep 26 #Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 #Python
Python 实现「食行生鲜」签到领积分功能
Sep 26 #Python
Linux下python3.6.1环境配置教程
Sep 26 #Python
You might like
windows xp下安装pear
2006/12/02 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
在html页面上拖放移动标签
2010/01/08 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
Python创建日历实例
2014/08/21 Python
python生成随机mac地址的方法
2015/03/16 Python
python访问类中docstring注释的实现方法
2015/05/04 Python
Python判断字符串与大小写转换
2015/06/08 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
python实现简易通讯录修改版
2018/03/13 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
Python3离线安装Requests模块问题
2019/10/13 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
在求职信中如何凸显个人优势
2013/10/30 职场文书
质检部岗位职责
2013/11/11 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
培训专员岗位职责
2014/02/26 职场文书
食堂卫生管理制度
2015/08/04 职场文书
社区结对共建协议书
2016/03/23 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA