1、项目启动顺序:

  启动项目:

python manage.py runserver

  启动celery beat

python manage.py celery beat

  启动celery worker

python manage celeryd -l info

  启动celery flower监控任务运行情况

celery flower --broker=redis://auth:root@localhost:6379

2、Django 结合 celery动态配置任务

  1、项目使用的版本 Django==1.11.7   celery==3.1.18 django-celery==3.2.2

  安装django-celery 安装celery

pip install celery==3.1.18
pip install django-celrey==3.2.2

  2、Django结合celery

  (1)、在项目的初始文件夹下添加celery.py 文件

celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery from django.conf import settings # noqa # set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'DSPProject.settings') app = Celery('DSPProject') # Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings') # Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) @app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))

  (2)  添加 celery配置到项目的settings.py 文件中

  settings.py

import djcelery
djcelery.setup_loader() BROKER_URL = 'redis://auth:root@localhost:6379'
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'
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_ENABLE_UTC = False
CELERYD_CONCURRENCY = 10
CELERYD_MAX_TASKS_PER_CHILD = 1 # 每个worker最多执行1个任务就会被销毁,可防止内存泄露 LOGIN_REDIRECT_URL = '/index/'
UPLOAD_FILE_DIR = os.path.join(BASE_DIR, "people/upload/")
CHANGE_UPLOAD_DIR = os.path.join(BASE_DIR, "change/upload/")
LOG_FILE_DIR = os.path.join(BASE_DIR, "log/")
BACKUP_USER_INFO_DIR = '/home/jiuyang/django/backup/user_info/' LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(levelname)s %(asctime)s %(message)s'
},
},
'filters': {
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'formatter':'standard',
},
'people_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename':'%s%s' % (LOG_FILE_DIR, 'people.log'),
'formatter':'standard',
},
'report_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename':'%s%s' % (LOG_FILE_DIR, 'report.log'),
'formatter':'standard',
},
'change_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename':'%s%s' % (LOG_FILE_DIR, 'change.log'),
'formatter':'standard',
},
'dtmt_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename':'%s%s' % (LOG_FILE_DIR, 'dtmt.log'),
'formatter':'standard',
},
'scheduled_tasks_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename':'%s%s' % (LOG_FILE_DIR, 'scheduled_tasks.log'),
'formatter':'standard',
},
'business_query_handler': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename':'%s%s' % (LOG_FILE_DIR, 'business_query.log'),
'formatter':'standard',
},
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'people_log':{
'handlers': ['people_handler'],
'level': 'INFO',
'propagate': False
},
'report':{
'handlers': ['report_handler'],
'level': 'INFO',
'propagate': False
},
'change':{
'handlers': ['change_handler'],
'level': 'INFO',
'propagate': False
},
'dtmt':{
'handlers': ['change_handler'],
'level': 'INFO',
'propagate': False
},
'scheduled_tasks':{
'handlers': ['scheduled_tasks_handler'],
'level': 'INFO',
'propagate': False
},
'business_query':{
'handlers': ['business_query_handler'],
'level': 'INFO',
'propagate': False
},
}
}

  (3)、写celery task实现具体的任务模板

task.py

from celery import shared_task

@shared_task(name='run_py')
def run_worke(*args):
# import
for line in args:
print('run,runrurnrurnhr',line)
return 'run python file ok' @shared_task(name='run_add')
def add():
x= 1
y =3
print(x+y,'ppppppppppppppppppppppppppppppppppppppppppppppppppppppppp')
return x + y

  (4)实现定时任务添加配置

#主要代码

def add_periodic_task_spiders(request):
# 提交新增周期任务数据
response = HttpResponse()
cur = Currency(request)
rq_post = getattr(cur, 'rq_post')
jdata = rq_post('data')
data = json.loads(jdata)
task_spiders = data['task_spiders']
crontab = data['crontab']
is_enable = data['is_enable']
is_encrypt = data['is_encrypt']
# is_sensitive = data['is_sensitive']
task_name = data['task_name']
task_template = data['task_template'] #将数据信息导入到celery的执行对列中
schedule = CrontabSchedule.objects.get(pk=crontab).schedule
create_or_update_task = DatabaseScheduler.create_or_update_task
schedule_dict = {
'schedule': schedule,
'task': task_template,
'args': [task_spiders],
'enabled': is_enable
}
create_or_update_task(task_name, **schedule_dict)
# mail_excel(mail_header, task_name, sql_list, **mailpara)
response.write(json.dumps({'status': 0, 'msg': ['操作成功']}))
return response

3、celery 实现分布式配置

在成功运行Django-celery之后,copy   celery task源码到需要分布式的机器,完成任务配置

django-celery配置的更多相关文章

  1. 独立两套DJANGO+CELERY配置(生产+测试)时要注意的一些细节

    1,生产的NGINX环境,要指定自己的目录,而不是PROJ默认的. upstream ism_host { server ; } server { listen ; server_name local ...

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

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

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

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

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

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

  5. django+celery+redis环境搭建

    初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...

  6. django+celery +rabbitmq

    celery是一个python的分布式任务队列框架,支持 分布的 机器/进程/线程的任务调度.采用典型的生产者-消费者模型 包含三部分:1. 队列 broker :可使用redis ,rabbitmq ...

  7. 使用django + celery + redis 异步发送邮件

    参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7  +  python3.6.1 + django2.0.1  ...

  8. django+celery 实现定时任务

    利用 celery 实现定时任务 celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat Celery安装 由于celery 4. ...

  9. django celery异步框架

    描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用.   安装django和celery pip install django pip install celery pip inst ...

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

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

随机推荐

  1. SQL2012数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份

    在一次数据库还原的操作过程中遇到如上错误,去百度了下找到了对应的解决方法 第一个: 在还原完整备份时候,在回复状态状态哪里选择 restore with norecovery ,尾日志部分可选可不选, ...

  2. 微信小程序与webview交互实现支付

    实现原理:点击h5网页的支付按钮——(跳转)——>嵌套改h5的小程序的支付页面——(处理支付)——>跳转至支付完成后的页面 注意:(1)网页h5中,引入微信的jssdk <scrip ...

  3. Springboot集成ECharts

    ECharts 是中国的,也是世界的! ECharts官网: ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前 绝大部分浏览器(IE8 ...

  4. Gephi——使用map of countries和Geo Layout实现包含地理坐标的数据可视化

    前言: Gephi(以下内容基于0.9.2)比较擅长用来处理社会网络分析,其自身以及插件对地理数据的支持非常不足.主要有以下几点: 1.map of countries这个插件可以在gephi底图上以 ...

  5. ASP.NET MVC上传文件

    最近参考网络资料,学习了ASP.NET MVC如何上传文件.最基本的,没有用jQuery等技术. 1.定义Model public class TestModel    {        [Displ ...

  6. 第4章学习小结_串(BF&KMP算法)、数组(三元组)

    这一章学习之后,我想对串这个部分写一下我的总结体会. 串也有顺序和链式两种存储结构,但大多采用顺序存储结构比较方便.字符串定义可以用字符数组比如:char c[10];也可以用C++中定义一个字符串s ...

  7. vue生命周期的理解

    我从官网上下载了一张vue生命周期的图,接下来实际分析一波vue到底执行了什么东西. 1.我们在使用vue时必不可少的操作就是 var vm = new Vue({}),这样我们就创建了一个vue的实 ...

  8. vue+webpack项目 url的问题了解

    阮一峰js模块化 webpack打包 url-loader vue Loader ES6 模块化  babel成CommonJS规范的实现 能正常显示图片的写法如下, src通过控制台可以看到被web ...

  9. 内核模块加载错误 “Invalid module format” 解决办法

    参考链接:  http://blog.chinaunix.net/uid-20448327-id-172345.html

  10. javascript闭包学习

    (function(){})()===>>>>函数会被立即执行function(){}是一个函数用括号包起来表示是函数表达式再加()表示函数自执行  如何理解闭包?1.定义和用 ...