详解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 socket 超时设置 errno 10054
Jul 01 Python
Python深入学习之对象的属性
Aug 31 Python
Python数据类型学习笔记
Jan 13 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
PyTorch实现AlexNet示例
Jan 14 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 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
我的论坛源代码(二)
2006/10/09 PHP
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
php DES加密算法实例分析
2019/09/18 PHP
js几个验证函数代码
2010/03/25 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python实现手机销售管理系统
2019/03/19 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
运输服务质量承诺书
2014/03/27 职场文书
2014年社会实践活动总结范文
2014/04/29 职场文书
义务教育学校标准化建设汇报材料
2014/08/16 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
办公室禁烟通知
2015/04/23 职场文书
处罚决定书范文
2015/06/24 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript