详解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 命令行参数sys.argv
Sep 06 Python
python使用pil生成缩略图的方法
Mar 26 Python
讲解Python中for循环下的索引变量的作用域
Apr 15 Python
python中while循环语句用法简单实例
May 07 Python
详解Python中用于计算指数的exp()方法
May 14 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
Python3实现发送QQ邮件功能(文本)
Dec 15 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
python适合人工智能的理由和优势
Jun 28 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
python 使用cycle构造无限循环迭代器
Dec 02 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标签自动补全闭合函数代码
2012/10/04 PHP
基于PHP生成静态页的实现方法
2013/05/10 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
html读出文本文件内容
2007/01/22 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
对javascript继承的理解
2016/10/11 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
js如何验证密码强度
2020/03/18 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
深入学习python的yield和generator
2016/03/10 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
Unix如何在一行中运行多个命令
2015/05/29 面试题
办公室文秘岗位职责
2013/11/15 职场文书
工程业务员岗位职责
2013/12/31 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
Nginx域名转发使用场景代码实例
2021/03/31 Servers
PHP判断是否是json字符串
2021/04/01 PHP
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python