django定期执行任务(实例讲解)


Posted in Python onNovember 03, 2017

要在django项目中定期执行任务,比如每天一定的时间点抓取数据,刷新数据库等,可以参考stackoverflow的方法,先编写一个manage.py命令,然后使用crontab来定时执行这个命令。

定制manage.py命令

app可以使用manage.py注册自己的命令,比如要在polls这个app中定制一个closepoll命令,要先向polls文件夹中添加一个management/commands的目录:

polls/
  __init__.py 
  models.py 
  management/
    __init__.py 
    commands/
      __init__.py 
      _private.py 
      closepoll.py 
  tests.py 
  views.py

这样,commands目录下每一个不以"_"开头的py文件都被注册为一个manage.py命令。

python 2版本中注意management和commands目录下都要包含一个__init__.py文件。

closepoll.py文件中必须定义一个继承自BaseCommand的类Command。

from django.core.management.base import BaseCommand, CommandError 
from polls.models import Poll 
 
class Command(BaseCommand): 
  help = 'Closes the specified poll for voting'
 
  def add_arguments(self, parser): 
    parser.add_argument('poll_id', nargs='+', type=int) 
 
  def handle(self, *args, **options): 
    for poll_id in options['poll_id']: 
      try: 
        poll = Poll.objects.get(pk=poll_id) 
      except Poll.DoesNotExist: 
        raise CommandError('Poll "%s" does not exist' % poll_id) 
 
      poll.opened = False
      poll.save() 
 
      self.stdout.write(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id))

在django1.8之前,manage.py命令的命令行解析是基于optparse库的,其中位置参数会被传给*args,而可选参数传给**options。1.8之后,命令行解析基于argparse库,参数都是传给**options的。

closepoll.py文件中添加了名为poll_id的位置参数,数目为一个或者更多,类型为整数:

def add_arguments(self, parser): 
parser.add_argument('poll_id', nargs='+', type=int)

closepoll命令就可以这样使用了:

python manage.py closepoll <poll_id>

self.stdout和self.stderr可以在控制台中显示你想要显示的信息。

可以添加可选参数:

class Command(BaseCommand): 
  def add_arguments(self, parser): 
    # Positional arguments 
    parser.add_argument('poll_id', nargs='+', type=int) 
 
    # Named (optional) arguments 
    parser.add_argument('--delete', 
      action='store_true', 
      dest='delete', 
      default=False, 
      help='Delete poll instead of closing it') 
 
  def handle(self, *args, **options): 
    # ... 
    if options['delete']: 
      poll.delete()

添加一个名为--delete值为True的可选参数。

执行python manage.py closepoll 1 2 3 --delete时,将id为1,2,3的poll删除。

执行python manage.py closepoll 1 2 3 时,--delete取值为默认值False。

使用crontab定时执行manage.py命令

使用crontab -e命令编辑cron,窗口会有提示:

# m h dom mon dow  command

在某月(mon)的某天(dom)或者星期几(dow)的几点(h,24小时制)几分(m)执行某个命令(command),*表示任意时间。

* */2 * * * python manage.py closepoll <poll_id>

这样表示每两个小时执行一次closepoll命令,为了防止manage.py文件找不到,可以写上manage.py文件的真实地址。

保存后重启cron即可:

sudo service cron restart

以上这篇django定期执行任务(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python处理按钮消息的实例详解
Jul 11 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
python try except 捕获所有异常的实例
Oct 18 Python
Python给图像添加噪声具体操作
Mar 03 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
Django框架安装方法图文详解
Nov 04 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
python 用struct模块解决黏包问题
Nov 07 Python
如何使用Python进行PDF图片识别OCR
Jan 22 Python
python异常中else的实例用法
Jun 15 Python
python嵌套字典比较值与取值的实现示例
Nov 03 #Python
基于Python os模块常用命令介绍
Nov 03 #Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 #Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 #Python
python使用PyCharm进行远程开发和调试
Nov 02 #Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 #Python
详解Python里使用正则表达式的ASCII模式
Nov 02 #Python
You might like
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
详解基于webpack&amp;gettext的前端多语言方案
2019/01/29 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
Saltstack快速入门简单汇总
2016/03/01 Python
Flask之请求钩子的实现
2018/12/23 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
python multiprocessing多进程变量共享与加锁的实现
2019/10/02 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
内科护士实习自我鉴定
2013/10/17 职场文书
幼儿园实习自我鉴定
2013/12/15 职场文书
大学新生军训感言
2014/02/25 职场文书
小学作文评语大全
2014/04/21 职场文书
项目经理任命书
2014/06/04 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
男方婚礼答谢词
2015/01/20 职场文书
汉字听写大会观后感
2015/06/12 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书