详解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中使用OpenCV进行人脸检测的例子
Apr 18 Python
python 换位密码算法的实例详解
Jul 19 Python
python简单实现操作Mysql数据库
Jan 29 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
python直接获取API传递回来的参数方法
Dec 17 Python
numpy基础教程之np.linalg
Feb 12 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
执行Python程序时模块报错问题
Mar 26 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
如何获取numpy array前N个最大值
May 14 Python
pytorch 使用半精度模型部署的操作
May 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
PHP 高手之路(二)
2006/10/09 PHP
php初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
JS实现前端路由功能示例【原生路由】
2020/05/29 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
广告学毕业生求职信
2014/01/30 职场文书
教师节倡议书
2014/08/30 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python
德生BCL3000抢先使用感受和评价
2022/04/07 无线电