当前位置: 首页 > news >正文

django开发-定时任务的使用

今天介绍在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: 删除所有定时任务

今天的定时任务就说到这里,有错误之处,欢迎交流指正!

相关文章:

  • VB6实现真正的继承【转】
  • WPF 窗口
  • 三菱数控CNC系统G代码M代码大全
  • Java 注释
  • ansible debug模块学习笔记
  • idea常用快捷键
  • MySql 用户管理 中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):...
  • 迎双11十周年,OceanBase 2.0挑战新巅峰
  • PHP 字符串
  • 文本监控 :oninput onchange onpropertychange 的区别
  • 201621123057 《Java程序设计》第7周学习总结
  • 《Netkiller Blockchain 手札》Hyperledger Fabric Java SDK Demo
  • xml文件里 用js语句获取 当前时间
  • 基于 ElasticSearch 搜索服务的简易 API 调用
  • SCCM 2016 使用PXE 部署操作系统(五)
  • 08.Android之View事件问题
  • android图片蒙层
  • C++11: atomic 头文件
  • echarts的各种常用效果展示
  • IDEA 插件开发入门教程
  • iOS编译提示和导航提示
  • Java IO学习笔记一
  • JAVA并发编程--1.基础概念
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Node 版本管理
  • opencv python Meanshift 和 Camshift
  • PHP面试之三:MySQL数据库
  • Shell编程
  • webpack4 一点通
  • 产品三维模型在线预览
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 类orAPI - 收藏集 - 掘金
  • 理解在java “”i=i++;”所发生的事情
  • 你真的知道 == 和 equals 的区别吗?
  • 排序算法学习笔记
  • 微服务核心架构梳理
  • 项目管理碎碎念系列之一:干系人管理
  • 应用生命周期终极 DevOps 工具包
  • scrapy中间件源码分析及常用中间件大全
  • 选择阿里云数据库HBase版十大理由
  • 整理一些计算机基础知识!
  • (搬运以学习)flask 上下文的实现
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)斐波那契Fabonacci函数
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • .Net FrameWork总结
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • @PreAuthorize注解
  • [ C++ ] STL---string类的使用指南
  • [20170728]oracle保留字.txt
  • [ai笔记4] 将AI工具场景化,应用于生活和工作