django -- Celery实现异步任务
1. 环境
python==2.7
djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题
celery-with-redis==3.0 # 需要用到redis作为中间人服务(Broker)
celery==3.1.25 # 安装上面的会自动安装
kombu==3.0.37
billiard==3.3.0.23
django-celery==3.2.2 # celery插件, 实现定时任务
celery>=4.0 不支持windows, 具体参考官方文档
2. 安装
pip install django==1.11.2 celery-with-redis==3.0 django-celery==3.2.2
3. 安装Redis, 用作Broker (RabbitMQ 官方推荐, 但安装麻烦点)
教程很多, 略
4. 新建django项目
- Demo
- Demo
setting.py
wsgi.py
urls.py
- app
- migrations
models.py
views.py
...
- 配置
settings.py
INSTALLED_APPS = (
...
'app',
'djcelery',# django-celery 可以在admin后台定义定时任务, 开始前需要直接migrate
)
BROKER_URL = 'redis://127.0.0.1:6379/0'
BROKER_TRANSPORT = 'redis'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 数据库调度
- 新建文件
Demo/Demo/celery.py
from __future__ import absolute_import
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Demo.settings')
from django.conf import settings # noqa
app = Celery('Demo')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
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))
- 新建
Demo/app/tasks.py
from Demo.celery import app
@app.task
def cus_task(*arg):
print('This is a test task')
- 编辑
Demo/app/views.py
from django.shortcuts import render, HttpResponse
from .tasks import cus_task
def index(request):
cus_task.delay()
return HttpResponse("Test async task")
- 启动
django
和celery
# django
python manage.py runserver
# celery
celery -A Demo worker -l debug
admin后台中配置celery
计划
- 配置
# 如上settings.py中的设置, 后执行
python manage.py migrate djcelery
- 登陆admin后台进行配置
# Djcelery模块列表
Crontabs # 同linux crontab
Intervals # 间隔
Periodic tasks # 周期任务
Tasks
Workers
配置一个
periodic task
任务内容app.tasks.cus_task
用crontab
或interval
设置每5s执行一次
- 启动django和celery, 并查看日志
celery -A Demo worker -l debug
# 另一个窗口
celery -A Demo beat -l debug --max-interval=10 # 每10s扫描一次djcelery任务
补充
- [ ] 安装
flower
pip install flower
- [ ] 启动flower(默认启动一个webserver:5555)
python manage.py celery flower
- [ ] 浏览器打开
http://localhost:5555
查看具体
django -- Celery实现异步任务的更多相关文章
- Django+Celery 执行异步任务和定时任务
celery是一个基于python开发的简单.灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度.采用典型的生产者-消费者模型,主要由三部分组成: 1. 消 ...
- Django Celery Redis 异步执行任务demo实例
一.windows中安装redis 安装过程见 <在windows x64上部署使用Redis> 二.环境准备 requirements.txt Django==1.10.5 celery ...
- 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 异步发送邮件
参考:http://blog.csdn.net/Ricky110/article/details/77205291 环境: centos7 + python3.6.1 + django2.0.1 ...
- django celery异步框架
描述:实现运维平台的异步执行与定时任务,以下简单描述了安装过程及使用. 安装django和celery pip install django pip install celery pip inst ...
- Django --- celery异步任务与RabbitMQ模块
一 RabbitMQ 和 celery 1 celery Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务, ...
- Django使用Celery进行异步任务
Celery Celery是一个功能完备即插即用的异步任务队列系统.它适用于异步处理问题,当发送邮件.或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用 ...
- Django+Celery+xadmin实现异步任务和定时任务
Django+Celery+xadmin实现异步任务和定时任务 关注公众号"轻松学编程"了解更多. 一.celery介绍 1.简介 [官网]http://www.celerypro ...
- celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决
今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...
随机推荐
- tomcat之日志切割
日志分割 场景:日志量比较大,且研发程序没有设置分卷 1.配置样例: 文件路径:/etc/logrotate.d/tomcat /data/logs/catalina.out { daily comp ...
- (转)mybatis热加载(依赖mybatis-plus插件)的实现
最近在使用mybatis,由于是刚刚开始用,用的并不顺手,目前是感觉有2个地方非常的不好用: 1.mybatis调试不方便 由于dao层只有接口,实现只是一个map的xml文件,想加断点都没有地方加, ...
- 合并两个数组并去重(ES5和ES6两种方式实现)
合并两个数组并去重(ES5和ES6两种方式实现) ES6实现方式 let arr1 = [1, 1, 2, 3, 6, 9, 5, 5, 4] let arr2 = [1, 2, 5, 4, 9, 7 ...
- JavaScript 总结(前端常用工具类的封装)
JavaScript (class是ES6的新东西,看着不爽可以变,但主要还是里面的方法) 1. type 类型判断 class TypeFn { isString (o) { //是否字符串 ret ...
- 搜索过滤Tip : title,site(搜标题和搜网站)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~拿老东家作例子了.........
- org.apache.commons.lang.StringUtils的常用方法
org.apache.commons.lang.StringUtils是apache的commons-lang-x.x.jar下的包,里面包含很多字符串操作方法, 官网(http://commons. ...
- 百度前端技术学院-task2.18-2.19源码以及个人总结
源码:http://yun.baidu.com/share/link?shareid=2310452098&uk=1997604551 1.感觉在写js的时候,最好先理清思路,先干什么,在干什 ...
- 并发编程之 AQS 源码剖析
前言 JDK 1.5 的 java.util.concurrent.locks 包中都是锁,其中有一个抽象类 AbstractQueuedSynchronizer (抽象队列同步器),也就是 AQS, ...
- thinphp 缓存机制导致代码不跟新
问题: 调试阶段,程序已经更新,但是浏览器没有出现新效果! 1.以为是谷歌浏览器缓存导致,解决:设置--高级设置--隐私设置--清除浏览器缓存 一小时过去了,但还是没有更新,怎么刷新都没用!! 2. ...
- Android-Binder机制
http://www.jianshu.com/p/af2993526daf https://www.jianshu.com/u/e347b97e2f0c 上面这篇文章讲得很清楚.以下我的一些理解: 还 ...