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的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
查看django版本的方法分享
May 14 Python
Python常用字符串替换函数strip、replace及sub用法示例
May 21 Python
python 利用文件锁单例执行脚本的方法
Feb 19 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 Python
详解运行Python的神器Jupyter Notebook
Jun 03 Python
Python 中 Shutil 模块详情
Nov 11 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数组是否为索引数组的实现方法
2013/06/13 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
php日历制作代码分享
2014/01/20 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
python 日志 logging模块详细解析
2020/03/31 Python
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
携程英文网站:Trip.com
2017/02/07 全球购物
Python如何定义一个函数
2015/09/01 面试题
小学新学期教师寄语
2014/01/18 职场文书
企业授权委托书范本
2014/04/02 职场文书
公司口号大全
2014/06/11 职场文书
青奥会口号
2014/06/12 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
怎么用Python识别手势数字
2021/06/07 Python
如何利用python实现列表嵌套字典取值
2022/06/10 Python