详解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的Tornado框架的HTTP客户端的教程
Apr 24 Python
Python实现读取文件最后n行的方法
Feb 23 Python
Django开发中的日志输出的方法
Jul 02 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
pyCharm 实现关闭代码检查
Jun 09 Python
零基础学python应该从哪里入手
Aug 11 Python
Python+pyftpdlib实现局域网文件互传
Aug 24 Python
浅析python中的del用法
Sep 02 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
python爬虫快速响应服务器的做法
Nov 24 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
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
PHP代码加密的方法总结
2020/03/13 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
Python工程师面试题 与Python Web相关
2016/01/14 Python
python 2.7.14安装图文教程
2018/04/08 Python
Python中函数参数调用方式分析
2018/08/09 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
为什么说python更适合树莓派编程
2020/07/20 Python
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
动态密码技术
2012/10/18 面试题
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
python中redis包操作数据库的教程
2022/04/19 Python