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 BeautifulSoup设置页面编码的方法
Apr 03 Python
部署Python的框架下的web app的详细教程
Apr 30 Python
Python删除windows垃圾文件的方法
Jul 14 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
python调用并链接MATLAB脚本详解
Jul 05 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
python 协程 gevent原理与用法分析
Nov 22 Python
python中的plt.cm.Paired用法说明
May 31 Python
python函数的两种嵌套方法使用
Apr 02 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
DOMXML函数笔记
2006/10/09 PHP
支持oicq头像的留言簿(一)
2006/10/09 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
php5.3 注意事项说明
2013/07/01 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
jquery $("#variable") 循环改变variable的值示例
2014/02/23 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
浅谈Python基础之I/O模型
2017/05/11 Python
python对于requests的封装方法详解
2019/01/03 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
2020/04/16 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
营销总经理的岗位职责
2013/12/15 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
《大海那边》教学反思
2014/04/09 职场文书
学生个人评语大全
2015/01/04 职场文书
坎儿井导游词
2015/02/09 职场文书
大学生个人总结范文
2015/02/15 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
护理自荐信
2019/05/14 职场文书
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers