详解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实现抓取网页并且解析的实例
Sep 20 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
tensor和numpy的互相转换的实现示例
Aug 02 Python
python 统计文件中的字符串数目示例
Dec 24 Python
使用Pytorch来拟合函数方式
Jan 14 Python
Python常用类型转换实现代码实例
Jul 28 Python
python 怎样进行内存管理
Nov 10 Python
python实现Thrift服务端的方法
Apr 20 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中调用JAVA
2006/10/09 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
css图片自适应大小
2007/11/28 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
js数组的基本使用总结
2021/01/18 Javascript
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
Python读取实时数据流示例
2019/12/02 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
车辆安全检查制度
2014/01/12 职场文书
采购经理岗位职责
2014/02/16 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
吴仁宝观后感
2015/06/09 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python