详解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中的文件和目录操作实现代码
Mar 13 Python
python通过正则查找微博@(at)用户的方法
Mar 13 Python
Python 3.x 新特性及10大变化
Jun 12 Python
python压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 Python
使用python实现多维数据降维操作
Feb 24 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
使用jupyter notebook运行python和R的步骤
Aug 13 Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 Python
python requests库的使用
Jan 06 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
pandas进行数据输入和输出的方法详解
Mar 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
深入PHP5中的魔术方法详解
2013/06/17 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
js 如何实现对数据库的增删改查
2012/11/23 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
python getopt详解及简单实例
2016/12/30 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
护士自我鉴定
2013/10/23 职场文书
化学学院毕业生自荐信范文
2013/12/17 职场文书
学生党支部先进事迹
2014/02/04 职场文书
授权委托书格式模板
2014/04/03 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
请假条应该怎么写?
2019/06/24 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL