详解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批量修改文件后缀示例代码分享
Dec 24 Python
python实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
Python调用命令行进度条的方法
May 05 Python
python从入门到精通(DAY 1)
Dec 20 Python
Python函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
Python标准库sched模块使用指南
Jul 06 Python
python学习教程之Numpy和Pandas的使用
Sep 11 Python
python操作excel让工作自动化
Aug 09 Python
通俗讲解python 装饰器
Sep 07 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 Python
Python可视化学习之seaborn调色盘
Feb 24 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 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
php下目前为目最全的CURL中文说明
2010/08/01 PHP
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
js实现简单的秒表
2020/01/16 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
python追加元素到列表的方法
2015/07/28 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
对python中的argv和argc使用详解
2018/12/15 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
Python  Django 母版和继承解析
2019/08/09 Python
python二元表达式用法
2019/12/04 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
教导主任个人总结
2015/03/03 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
政协常委会议主持词
2015/07/03 职场文书
感恩的心主题班会
2015/08/12 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript