需求:

前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统、监控,于是乎开发、测试、产品、运营、业务部、财务等等各个部门就跟那饥渴的饿狼一样需要

各种各样的系统数据满足他们。刚开始一天一个还能满足他们,优化脚本之后只要开发提供查询数据的SQL、收件人、执行时间等等参数就可以几分钟写完一个定时任务脚本

,到后面不知道是不是吃药了一天三四个定时任务,不到半个月手里一下就20多个定时任务了,渐渐感到力不从心了,而且天天还要给他们修改定时任务的SQL、收件人、执

行时间等等,天天写定时任务脚本都写到想吐,真是心里面一万只草泥马崩腾而过。于是乎下定决心写一个定时任务管理系统,把所有的定时任务都统一放到一个平台上进行

管理,经过大半个月的调查发现Django+Celery是一个不错的方案。Django结合djcelery模块可以在django-admin管理后台配置定时任务,但是页面是写死的不灵活,所

以只能再二次开发一个页面进行配置管理。

详细的安装步骤不细说,网上有大量文档,我是参照51cto一位哥们儿安装的。

celery3.x版本安装:http://shineforever.blog.51cto.com/1429204/1737323

celery4.x版本安装:http://www.cnblogs.com/alex3714/p/6351797.html  (金角大王)

我选择的是celery3.x版本的,用的django-celery模块,celery4.x用的是django-celery-beat,因为celery4.x版本的django-celery-beat在djang-admin后台

添加task后系统不会对修改后的任务即时生效,而是需要重启celery-beat服务才能生效,真你妹擦蛋,而且网上一直没找到解决方案,所以选择了celery3.x版本

,此版本在django-admin后台增删改查task后不用重启celery-beat就能生效。

django-admin页面

periodic tasks 配置页面

参数配置页面

periodic tasks 列表页面

我的定时任务脚本通常是根据开发给的SQL语句去生产库里抓取数据然后生成Excel文件再以邮件形式发给各个部门,因此需要传的参数有SQL语句(SQL有时十几个,而且

比屎还长)、每一个SQL执行的数据库、邮件收件人、邮件抄送人、邮件标题、Excel文件名等等,由于参数太多如果用django-admin里自带的页面进行配置task,那么就需

要在参数配置页面里写跟屎一样长的一大串列表或者字典,非常不方便,而且它的列表页面也不人性化,所以需要一个人性化的页面进行配置和管理。

django-celery所生成的表

经过测试发现在django-admin所做的修改其实都是修改数据库,修改后django-celery会实时推送到celery-beat里生效。所以只要再开发一个页面去配置

djcelery_periodictask及其它表就可以了。

定时任务列表页面,对应djcelery_periodictask表

新增或修改配置定时任务页面

crontab执行时间的列表页面,这个页面和django-admin一样,照搬的,这样就不用再跑到admin页面去配置。

crontab编辑页面

总结:

从技术调研到开发、测试完成折腾了一个多月,这样统一到一个平台管理后更加方便快捷,配置、修改一个定时任务分分钟搞定。celery支持集群,

如果以后任务多了,成百上千的定时任务就可以用celery的集群。

有时候有些定时任务会因为某些原因失败,所以我还想对执行的任务进行监控,我想知道每天有多少任务执行成功、有多少失败、耗时多长时间、

如果执行失败,失败原因是什么等等,刚开始用的flower,但是在django项目里app少的时候可以把flower服务起来,我的项目十多个app硬是没起来,只好放弃,

而且flower的监控页面跟django-admin里的一样periodic_tasks页面一样直接显示的所有参数值,非常不人性化,还需要二次开发,这样还是自己写一个celery的

监控。

我的平台用的是django,所以可以直接用django-celery,如果平台是tornado、flask、bottle那又该怎么结合celery来开发定时任务系统。根据网上一个哥

们儿的分析,原来django-celery是自已定义了一个任务调度器,在django-admin页面里配置、修改任务以后如何将这些修改反应到celery-beat里都是调度器完成

的,也就是这个DatabaseScheduler模块

from djcelery.schedulers import DatabaseScheduler

settings里还需要指定任务调度器,很熟悉吧。

CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 定时任务调度器

所以,如果要结合tornado、flask、bottle就需要自定义一个调度器,我也很推荐这种方法,奈何自己代码能力有限,不知如何下手,有机会还是要试试。

哥们儿博客地址:http://www.liuliqiang.info/post/celery-advanced-topic-scheduler-and-priority/,里面有他自己写的调度器,大湿(师)啊。

有几个注意点:

1.时区

刚开始时区不准,一直是UTC时间,后来索性把utc禁用,在settings里增加配置

CELERY_ENABLE_UTC = False

2.内存泄漏

刚开始我开了10个worker跑定时任务,跑10多个定时任务,才跑两天就发现woker占的内存越来越大一直不释放,后来发现默认每个worker跑完100个任务后才

会自我销毁程序重建来释放内存,所以需要增加一个配置定义每个worker执行多少个任务后才会自我销毁重建。

CELERYD_MAX_TASKS_PER_CHILD = 3 #  每个worker最多执行3个任务就会被销毁,可防止内存泄露

基于Django+celery二次开发动态配置定时任务 ( 一 )的更多相关文章

  1. 基于Django+celery二次开发动态配置定时任务 ( 二)

    一.需求 结合上一篇,使用djcelery模块开发定时任务时,定时任务的参数都保存在djcelery_periodictask表的args.kwargs字段里,并且是json格式.那么,当定时任务多了 ...

  2. 结合Django+celery二次开发定时周期任务

    需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...

  3. celery 动态配置定时任务

    How to dynamically add or remove tasks to celerybeat? · Issue #3493 · celery/celery https://github.c ...

  4. Django + Celery 实现动态配置定时任务

    哈喽,今天给大家分享一篇Django+Celery实现动态配置定时任务,因为最近也是无意间看到一位大佬关于这块的文章,然后自己觉得不错,也想学习写一下,然后最终实现功能是在前端页面统一管理计划任务,大 ...

  5. 深入理解基于selenium的二次开发

    对于做web端自动化测试的人来说,可能接触selenium比QTP还要多,但是我们在做基于selenium的二次开发的时候,经常会说到二次开发是为了易于维护,很多人可能不懂得维护的价值是什么,和到底要 ...

  6. 基于Netbeans的安卓Android开发环境配置 - CSDN博客

    原文:基于Netbeans的安卓Android开发环境配置 - CSDN博客 基于Netbeans的安卓Android开发环境配置 一.准备工作 NetBeans 勾选网页中的Accept-选择对应系 ...

  7. 基于Eclipse的Hadoop应用开发环境配置

    基于Eclipse的Hadoop应用开发环境配置 我的开发环境: 操作系统ubuntu11.10 单机模式 Hadoop版本:hadoop-0.20.1 Eclipse版本:eclipse-java- ...

  8. [github项目]基于百度地图二次开发实现的车辆监管(包含车辆定位、车辆图片和方向控制,电子围栏,图形绘制等功能)前端实现(不包含后端实现)

    前言:基于百度地图javascript版本开发,百度地图中所用的key已承诺仅用于测试,不用于商业用途 注:本文所有代码可以到github上进行下载,github地址:http://map.eguid ...

  9. 基于django的视频点播网站开发

    项目名称 基于django的视频点播网站开发 项目背景 学习完毕python和django之后,想找个项目练练手,本来想写个博客项目练手,无奈别人已经写过了,所以笔者就打算写一个视频点播网站,因为笔者 ...

随机推荐

  1. mybatis分页插件Mybatis_PageHelper 简单案例

    源码地址(官网,文档) 使用条件: 支持mybatis 3.1.0+ sql 解析工具(jsqlparser.jar) 下载 Mybatis_PageHelper  版本随意,反正我用的5.0.0 m ...

  2. vue 开发系列(一) vue 开发环境搭建

    概要 目前前端开发技术越来越像后台开发了,有一站式的解决方案. 1.JS包的依赖管理像MAVEN. 2.JS代码编译打包. 3.组件式的开发. vue 是一个前端的一站式的前端解决方案,从项目的初始化 ...

  3. ASP.NET WebApi 基于分布式Session方式实现Token签名认证(发布版)

    一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...

  4. MPA(Macro Prudential Assessment)即宏观审慎评估体系

    MPA(Macro Prudential Assessment)即宏观审慎评估体系.2015年12月29日,央行发布公告称,为进一步完善宏观审慎政策框架,更加有效地防范系统性风险,发挥逆周期调节作用, ...

  5. mysql学习之路_基础知识

                    Mysql php阶段将数据库分为三个阶 基础阶段: mysql数据库的基本操作(增删改查),以及一些高级操作(视图,触发器,函数,存储过程等),PHP操作没有sql数 ...

  6. 微信小程序之弹框modal

    官方文档 <modal hidden="{{hidden}}" title="这里是title" confirm-text="自定义确定按钮&q ...

  7. SAX vs. DOM (Event vs. Tree)

    http://www.saxproject.org/event.html Events vs. Trees(大XML文档用SAX) There are two major types of XML ( ...

  8. MapGIS计算瓦片数据集

    https://www.docin.com/p-2103834433.html

  9. POJ3176--Cow Bowling(动态规划)

    The cows don't use actual bowling balls when they go bowling. They each take a number (in the range ...

  10. web-day1

    第1章   WEB01-HTML篇 今日任务 网站信息页面案例 网站图片信息页面案例 网站友情链接页面案例 网站首页案例 网站注册页面案例 网站后台页面案例 教学导航 教学目标 了解什么是标记语言 了 ...