django使用celery实现异步操作
需求:
django支持的http请求都是同步的,对于需要耗时较长的操作可能会导致阻塞。为此我们需要引入异步处理机制,即收到客户端请求后立即给予响应,具体任务交给另一个进程处理。
使用方法:
1. 安装软件
pip install celery
pip install django-celery
2. 在django项目(设为djprj)添加以下文件:
1) djprj/djprj/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','djprj.settings')
- from django.conf import settings
- app = Celery('djprj', backend='redis', broker='redis://127.0.0.1:6379/0')
- # 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)
2) 修改djprj/djprj/__init__.py文件,加入以下内容:
- from __future__ import absolute_import
- # This will make sure the app is always imported when
- # Django starts so that shared_task will use this app.
- from .celery import app as celery_app
3) 在djprj项目中需要异步处理的app中加入tasks.py文件。
内容如下:
- # -*- coding: utf-8 -*-
- # 本模块定义了celery任务
- from __future__ import absolute_import
- import logging
- from celery import shared_task
- @shared_task
- def add(x, y):
- log = logging.getLogger(config.HC_ASVR_LOG_NAME_TRACK)
- log.debug("Enter celery task tk2.tasks.add()")
- return x + y
4) 尝试启动celery
celery -A djprj worker --loglevel=info --workdir=/path/to/djprj --logfile=/path/to/logfile
如果执行成功,则将其加入到supervisord配置文件,运行于守护进程模式。
参考博客http://blog.csdn.net/yuanchao99/article/details/46413651
django使用celery实现异步操作的更多相关文章
- Django中Celery的实现介绍(一)
Django中Celery的实现 Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Cele ...
- django集成celery之callback方式link_error和on_failure
在使用django集成celery进行了异步调度任务之后,如果想对失败的任务进行跟踪或者告警,怎么做? 这里提供一个亲测的方法. 1.任务callback 假如你想在任务执行失败的时候,打印错误信息并 ...
- django集成celery
Celery是一个基于分布式消息传递的开源异步任务队列,在django实际应用场景下,往往有一些较为耗时,但并不需要返回值的任务, 例如发送邮件,更新我们自己的统计数据库,这时我们可以将这些任务交由c ...
- django配置celery
官网详尽的django结合celery的配置步骤 在django项目settings.py所在的目录中新建一个celery.py,内容如下 from __future__ import absolut ...
- Django中Celery http请求异步处理(四)
Django中Celery http请求异步处理 本章延续celery之前的系列 1.settings配置 2.编写task jib_update_task任务为更新salt jid数据 3.url设 ...
- Django使用Celery进行异步任务
Celery Celery是一个功能完备即插即用的异步任务队列系统.它适用于异步处理问题,当发送邮件.或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用 ...
- django、celery异步发邮件
django.celery异步发邮件 django自带的send_mail发邮件功能执行发邮件功能会因为网络的原因造成花费的时间过长,为了解决这个问题,可以用celery + redis代替 安装包: ...
- python django与celery的集成
一.celery与django 关于celery介绍和使用可以查看上篇Python中任务队列-芹菜celery的使用 关于django的介绍和使用可查看python django框架+vue.js前后 ...
- Django集成celery实战小项目
上一篇已经介绍了celery的基本知识,本篇以一个小项目为例,详细说明django框架如何集成celery进行开发. 本系列文章的开发环境: window 7 + python2.7 + pychar ...
随机推荐
- Python3.0+Selenium3进行Web自动化遇到的坑
1.搭建环境时,已经把chromedriver的路径加入到PATH,但是还是报错说需要加入PATH.此时重新启动下Pycharm即可
- 堆积木----vector防止内存超限
蒜头君有 nn 块积木,编号分别为 11 到 nn.一开始,蒜头把第 ii 块积木放在位置 ii.蒜头君进行 mm 次操作,每次操作,蒜头把位置 bb 上的积木整体移动到位置 aa 上面.比如 11 ...
- PHP学习笔记(5)GD库画验证码
<?php header("content-type:image/png"); $width = 500; $height = 500; $img = imagecreate ...
- linux学习笔记14--命令which和whereis
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. ...
- 跟着百度学PHP[14]-PDO的预处理语句2
在$sql = $pdo -> prepare("insert into users(gold,user,password) values(?,?,?)"):条语句我们不仅仅 ...
- idea,eclipse创建多模块项目
新建一个maven项目 iead,新建是不选择archetype,新建好之后,pom中的 <packaging>pom</packaging>节点是默认的,如果不是要改成这这样 ...
- JVM Specification 9th Edition (4) Chapter 4. The class File Format
Chapter 4. The class File Format Table of Contents 4.1. The ClassFile Structure 4.2. Names 4.2.1. Bi ...
- 如何移植.NET Framework项目至.NET Core?
公司的项目一直采用.NET框架来开发Web项目.目前基础类库均为.NET Framework 4.6.2版本.Caching, Logging,DependencyInjection,Configur ...
- jQuery实现浮动层跟随页面滚动效果
helloweba.com Author:月光光 Time:2010-11-29 09:02 Tag: jquery 滚动 在本文中,我将介绍一个可以跟随页面滚动的层效果,当用户滚动鼠标滚轮或者 ...
- LBP纹理特征
LBP-Local Binary Pattern,局部二值模式. 灰度不变性 改进:圆形LBP.旋转不变性 MB-LBP特征,多尺度Multiscale Block LBP: [转载自] 目标检测的图 ...