django+xadmin+djcelery实现后台管理定时任务


Posted in Python onAugust 14, 2018

继上一篇中间表的数据是动态的,图表展示的数据才比较准确。这里用到一个新的模块Djcelery,安装配置步骤如下:

1.安装

redis==2.10.6

celery==3.1.23

django-celery==3.1.17

flower==0.9.2

supervisor==3.3.4

flower用于监控定时任务,supervisor管理进程,可选

2.配置

settings.py中添加以下几行:

#最顶头加上
from __future__ import absolute_import

# celery settings
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://localhost:6379'
# BROKER_URL = 'redis://:密码@主机地址:端口号/数据库号'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 定时任务
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERYD_MAX_TASKS_PER_CHILD = 40
CELERY_TIMEZONE = 'Asia/Shanghai'

INSTALLED_APPS = [
'djcelery',# 添加djcelery
]

3.注册定时任务的几个表

from __future__ import absolute_import, unicode_literals
from djcelery.models import (
  TaskState, WorkerState,
  PeriodicTask, IntervalSchedule, CrontabSchedule,
)
from xadmin.sites import site
site.register(IntervalSchedule) # 存储循环任务设置的时间
site.register(CrontabSchedule) # 存储定时任务设置的时间
site.register(PeriodicTask) # 存储任务
site.register(TaskState) # 存储任务执行状态
site.register(WorkerState) # 存储执行任务的worker

4.主应用下添加celery.py

__init__.py修改如下:

django+xadmin+djcelery实现后台管理定时任务

# __init__.py
from __future__ import absolute_import
from .celery import app as celery_app


# celery.py
from __future__ import absolute_import

import os
from celery import Celery, platforms
from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'hermes.settings')

# hermes主应用名
app = Celery('hermes')
platforms.C_FORCE_ROOT = True

app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)
def debug_task(self):
  print('Request: {0!r}'.format(self.request))

5.添加任务 应用下添加tasks.py

django+xadmin+djcelery实现后台管理定时任务

from __future__ import absolute_import

from celery import task
import time

from .channels import Cache_data_to_redis

# 更新指定日期数据到sms_organizationcount
@task
def readAndWrite(begin,end):
  begin = str(begin)[:4] + '-' + str(begin)[4:6] + '-' + str(begin)[6:8]
  end = str(end)[:4] + '-' + str(end)[4:6] + '-' + str(end)[6:8]
  i = 0
  begin_time = time.time()
  read = Cache_data_to_redis().connection
  Rcursor = read.cursor()
  query = "SELECT id from sms_organizationcount WHERE alia_date_time between '"
  query += begin
  query += "' and '"
  query += end
  query += "'"
  readSql = "SELECT alia_month_time, alia_date_time, count(*) as total_nums, count(t.`status`=2 or null) as error_nums, name FROM \
       (select *, DATE_FORMAT(req_time,'%Y-%m') as alia_month_time, DATE_FORMAT(req_time,'%Y-%m-%d') as alia_date_time, \
       LEFT(body,LOCATE('】',body)) as name from sms_smslog where LOCATE('】',body) >0 \
       and LEFT(body,1)='【' and DATE_FORMAT(req_time,'%Y-%m-%d') between '"
  readSql += begin
  readSql += "' and '"
  readSql += end
  readSql += "')"
  readSql += " as t GROUP BY alia_date_time , name;"
  Rcursor.execute(readSql)
  readResult = Rcursor.fetchall()
  Rcursor.execute(query)
  query_result = Rcursor.fetchall()
  deleteSql = "delete from sms_organizationcount where alia_date_time between '%s' and '%s'" % (begin,end)
  if query_result:
    delete_record = Cache_data_to_redis().connection
    Dcursor = delete_record.cursor()
    Dcursor.execute(deleteSql)
    delete_record.commit()
    delete_record.close()
    for value in readResult:
    write = Cache_data_to_redis().connection
    Wcursor = write.cursor()
    writeSql = "INSERT into sms_organizationcount (alia_month_time, alia_date_time, total_nums, error_nums, `name`) " \
          " VALUES ('%s', '%s', '%s', '%s', '%s' )" %\
          (value['alia_month_time'], value['alia_date_time'], value['total_nums'], value['error_nums'], value['name'])
    try:
      Wcursor.execute(writeSql)
      i += 1
      write.commit()
    except:
      write.rollback()
    write.close()
  read.close()
  end_time = time.time()
  pass_time = end_time - begin_time
  return i, pass_time

6.最终效果如下图:

django+xadmin+djcelery实现后台管理定时任务

django+xadmin+djcelery实现后台管理定时任务

django+xadmin+djcelery实现后台管理定时任务

7.终端启动celery命令:

# 查看注册的task
celery -A hermes inspect registered
# 启动
python manage.py celery -A django_celery_demo worker -B  # django_celery_demo为celery和setting所在文件夹名

#celery_beat起不来
# 动态的输出启动进程时的输出
supervisorctl tail programname stdout


# flower监控celery
python manage.py celery flower
ip:5555

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python正则表达式中的括号匹配问题
Dec 14 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
Jul 23 Python
浅谈python抛出异常、自定义异常, 传递异常
Jun 20 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
Python lambda函数基本用法实例分析
Mar 16 Python
解决python文件双击运行秒退的问题
Jun 24 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
python对Excel的读取的示例代码
Feb 14 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
Elasticsearch 索引操作和增删改查
Apr 19 Python
Python延时操作实现方法示例
Aug 14 #Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 #Python
python 实现A*算法的示例代码
Aug 13 #Python
Python绘制KS曲线的实现方法
Aug 13 #Python
Python标准库shutil用法实例详解
Aug 13 #Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 #Python
python之super的使用小结
Aug 13 #Python
You might like
Php header()函数语法及使用代码
2013/11/04 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
mui框架移动开发初体验详解
2017/10/11 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
js正则相关知识点专题
2018/05/10 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python探索之创建二叉树
2017/10/25 Python
pandas的排序和排名的具体使用
2019/07/31 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
Python类及获取对象属性方法解析
2020/06/15 Python
python 动态绘制爱心的示例
2020/09/27 Python
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
大学专科生推荐信范文
2013/11/23 职场文书
经济信息系毕业生自荐信范文
2014/03/15 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
世界文化遗产导游词
2015/02/13 职场文书