django-celery的配置及使用
Celery简介
Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理
celery的应用
异步调用:那些用户不关心的但是又存在在我们API里面的操作 我们就可以用异步调用的方式来优化(发送邮件 或者上传头像)
定时任务:定期去统计日志,数据备份,或者其他的统计任务
相关概念
task:需要执行的任务
worker:负责干活的小弟们
broker:结果存放的位置
celery的安装和使用
pip install celery
pip install celery-with-redis
pip install django-celery
apt install redis-server
安装
配置
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = (
...
'djcelery',
‘自己的APP’
}
import djcelery
djcelery.setup_loader()
BROKER_URL='redis://localhost:6379/1'
CELERY_CONCURRENCY=2(设置worker的并发数量)
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'
settings.py文件
settings.py的同级目录下新建celery.py
from __future__ import absolute_import #绝对路径导入
from celery import Celery
from django.conf import settings
import os #设置系统的环境配置用的是Django的
os.environ.setdefault("DJANGO_SETTING_MODULE", "工程名字.settings") #实例化celery
app = Celery('mycelery') app.conf.timezone = "Asia/Shanghai" #指定celery的配置来源 用的是项目的配置文件settings.py
app.config_from_object("django.conf:settings") #让celery 自动去发现我们的任务(task)
app.autodiscover_tasks(lambda : settings.INSTALLED_APPS) #你需要在app目录下 新建一个叫tasks.py(一定不要写错)文件
celery.py
settings.py同级目录下的init.py加入
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__init__.py
使用
1、在需要使用异步任务的APP目录下新建tasks.py
from celery import task
import time @task
def hello_celery(loop):
for i in range(loop):
print 'hello'
time.sleep(2)
tasks.py
2、views.py内的调用
任务函数名.delay(参数,,,,)
3、python manage.py migrate 建表(不要忘记建表)
4、启动worker
python manage.py celery worker --loglevel=info (或者celery -A 你的工程名 worker -l info)
注意:修改tasks.py的内容后 要重启celery的服务(命令:python manage.py celery worker --loglevel=info)
定时任务
在settings.py文件添加
CELERYBEAT_SCHEDULE = {
'schedule-test': {
'task': 'app的名字.tasks.hello_celery',
'schedule': timedelta(seconds=3),
'args': (2,)
}, }
settings.py
启动: celery -A 你的工程名称 beat -l info(或者python manage.py celery beat --loglevel=info)
计划任务时间
from celery.schedules import crontab
crontab(minute=u'', hour=u'',day_of_week='mon,tue,wed,thu,sun') 示例如下:
'every-week-three-and-four-run-get_data_with_param':{
'task': 'APP的名字.tasks.get_data_with_param',
'schedule': crontab(day_of_week="3, 4"),
'args':(4, )
}
注意:
我们启动定时任务服务时 也要先开启worker(python manage.py celery worker --loglevel=info)
如果只开启定时服务 没有开启worker服务 那么定时任务会被放入任务队列,但是由于没有干活儿的worker 那么任务是不会被执行,当worker服务被启动后 会立刻去任务队列领任务并执行
#<分钟> <小时> <日> <月份> <星期> <命令> */1 * * * * date>>a.txt #用date>>~/crontest可以很清楚的看到测试的效果 5 * * * * ls #指定每小时的第5分钟执行一次ls命令 30 5 * * * ls #指定每天的 5:30 执行ls命令 30 7 8 * * ls #指定每月8号的7:30分执行ls命令 30 5 8 6 * ls #指定每年的6月8日5:30执行ls命令 30 6 * * 0 ls #指定每星期日的6:30执行ls命令【注:0表示星期天,1表示星期1。星期也可以用英文来表示,sun表示星期天,mon表示星期一等。】 30 3 10,20 * * ls #每月10号及20号的3:30执行ls命令【注:“,”用来连接多个不连续的时段】 25 8-11 * * * ls #每天8-11点的第25分钟执行ls命令【注:“-”用来连接连续的时段】 */15 * * * * ls #每15分钟执行一次ls命令【即每个小时的第0 15 30 45 60分钟执行ls命令】 30 6 */10 * * ls #每个月中,每隔10天6:30执行一次ls命令【即每月的1、11、21、31日是的6:30执行一次ls 命令。】 50 7 * * * root run-parts /etc/cron.daily #每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件【注:run-parts参数表示执行后面目录中的所有可执行文件。】 重启服务 :/etc/init.d/cron restart 计划是分用户的,只对当前用户显示 */20 4 10,13 6-8 *
计划任务
如果上面的重启方式不成功, 重启任务: /sbin/service crond restart
django-celery的配置及使用的更多相关文章
- django celery异步框架
描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用. 安装django和celery pip install django pip install celery pip inst ...
- 基于Django+celery二次开发动态配置定时任务 ( 一 )
需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...
- 基于Django+celery二次开发动态配置定时任务 ( 二)
一.需求 结合上一篇,使用djcelery模块开发定时任务时,定时任务的参数都保存在djcelery_periodictask表的args.kwargs字段里,并且是json格式.那么,当定时任务多了 ...
- Django + Celery 实现动态配置定时任务
哈喽,今天给大家分享一篇Django+Celery实现动态配置定时任务,因为最近也是无意间看到一位大佬关于这块的文章,然后自己觉得不错,也想学习写一下,然后最终实现功能是在前端页面统一管理计划任务,大 ...
- django+celery+redis环境搭建
初次尝试搭建django+celery+redis环境,记录下来,慢慢学习~ 1.安装apache 下载httpd-2.0.63.tar.gz,解压tar zxvf httpd-2.0.63.tar. ...
- django+celery +rabbitmq
celery是一个python的分布式任务队列框架,支持 分布的 机器/进程/线程的任务调度.采用典型的生产者-消费者模型 包含三部分:1. 队列 broker :可使用redis ,rabbitmq ...
- django -- Celery实现异步任务
1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...
- django —— Celery实现异步和定时任务
1. 环境 python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Bro ...
- Django Celery Redis 异步执行任务demo实例
一.windows中安装redis 安装过程见 <在windows x64上部署使用Redis> 二.环境准备 requirements.txt Django==1.10.5 celery ...
- 结合Django+celery二次开发定时周期任务
需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...
随机推荐
- 洛谷P3455 ZAP-Queries [POI2007] 莫比乌斯反演+数论分块
正解:莫比乌斯反演 解题报告: 传送门! 首先这题刚看到就很,莫比乌斯反演嘛,和我前面写了题解的那个一模一样的,所以这儿就不讲这前边的做法辣QAQ 但是这样儿还有个问题,就现在已知我每次都是要O(n) ...
- linear-gradient常用实现效果
之前也研究过css3的这个属性,感觉没什么大用,一般的开发不会用到,毕竟调出来的渐变不专业,不如找一个好看的图片,其实很多时候还是有用的,偷来三个例子. 一.控制虚线 一般写虚线都用dashed,但有 ...
- IdentityServer4授权和认证集成Identity和profile
identiyt的使用可以看之前的文章:https://www.cnblogs.com/nsky/p/10323415.html 之前的ids4授权服务器都是用的in-men方式把数据添加到内存, 现 ...
- Thinkphp----------Thinkphp3.2的目录结构介绍
ThinkPHP框架目录结构\index.php 入口文件\Application 应用目录\Public 资源文件目录\ThinkPHP 框架核心目录 ...
- JAVA 多线程之volatile的介绍
volatile的介绍 volatile的主要作用是:提示编译器该对象的值有可能在编译器未监测的情况下被改变. volatile类似于大家所熟知的const也是一个类型修饰符.volatile是给编译 ...
- html5 javascript 事件练习1
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- GO流程控制
Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码.降低重复代码而生的结构,不常用,属于扩展类的流程控制. if else if基本写法 if 表达式1 { 分支1 ...
- Android项目开发第二天,关于GitHub
一. 今天在网上学习了如何使用GitHub,了解了GitHub是干什么的. 作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户.随着越来越多的应用程序转移到了云上,Github已经 ...
- vs2017 exe在Linux上运行
1:将vs .netcore控制台项目发布打包(比如文件名为:demo2core.zip,以下会用到) 2:使用XShell软件连接Linux a.在linux上使用命令 id addr找出ip地址 ...
- C#简单的九九乘法表
for(int i=1;i<10;i++) { for(int j=1;j<=i;j++) { Console.Write("{0}*{1}={2}",j,i,i*j) ...