详解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 itchat实现微信自动回复的示例代码
Aug 14 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
python数字图像处理之高级形态学处理
Apr 27 Python
PyQt5实现简易电子词典
Jun 25 Python
对Python函数设计规范详解
Jul 19 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
pandas数据拼接的实现示例
Apr 16 Python
浅析Python实现DFA算法
Jun 26 Python
Python 中 Shutil 模块详情
Nov 11 Python
Python利用zhdate模块实现农历日期处理
Mar 31 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
Angular实现响应式表单
2017/08/04 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
Python continue语句用法实例
2014/03/11 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
python中time.ctime()实例用法
2021/02/03 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
机械设计制造专业个人求职信
2013/09/25 职场文书
中专生自荐信
2013/10/12 职场文书
电气工程和自动化自荐信范文
2013/12/25 职场文书
事业单位鉴定材料
2014/05/25 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
swagger如何返回map字段注释
2021/07/03 Java/Android
python中的sys模块和os模块
2022/03/20 Python
MySql数据库 查询时间序列间隔
2022/05/11 MySQL