详解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 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
python实现将文本转换成语音的方法
May 28 Python
详解Django中的form库的使用
Jul 18 Python
python3.5使用tkinter制作记事本
Jun 20 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
python flask几分钟实现web服务的例子
Jul 26 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
Python实现简单猜数字游戏
Feb 03 Python
Python中的流程控制详解
Feb 18 Python
pycharm无法导入lxml的解决办法
Mar 31 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过滤危险html代码
2008/08/18 PHP
PHP 全角转半角实现代码
2010/05/16 PHP
php 地区分类排序算法
2013/07/01 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
图片完美缩放
2006/09/07 Javascript
在html页面中包含共享页面的方法
2008/10/24 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
Python中的类学习笔记
2014/09/23 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
python读取ini配置文件过程示范
2019/12/23 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
电大会计学自我鉴定
2014/02/06 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
师德演讲稿范文
2014/05/06 职场文书
文秘应届生求职信
2014/07/05 职场文书
大专学生求职自荐信
2014/07/06 职场文书
青年文明号汇报材料
2014/12/23 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书