Django异步任务之Celery的基本使用


Posted in Python onMarch 23, 2019

Celery

许多Django应用需要执行异步任务, 以便不耽误http request的执行. 我们也可以选择许多方法来完成异步任务, 使用Celery是一个比较好的选择, 因为Celery有着大量的社区支持, 能够完美的扩展, 和Django结合的也很好. Celery不仅能在Django中使用, 还能在其他地方被大量的使用. 因此一旦学会使用Celery, 我们可以很方便的在其他项目中使用它.

celery 是一个用于实现异步任务的库, 在很多项目中都使用它, 它和 django 融合使用很完美. 使用 celery 可以在实现 http request请求返回 view 前做一些我们想做的而且耗时的事情而不会让用户等待太久

环境

django 版本 == 1.11.6

celery 版本 == 3.1.25

安装

pip install django-celery
pip install celery

首先需要将 celery 添加到 django 项目的 settings 里, celery 任务和 django 需要一个 中间人(broker),,这里使用的是 django 自带的 broker, 但在生产中一般使用 rabbitmq, Redis 等,在 INSTALLED_APP 中需要添加 djcelery 和 kombu.transport.django, 还有 app 应用。

- project/project/ settings.py:

import djcelery

djcelery.setup_loader() 
BROKER_URL = 'django://'

INSTALLED_APP = (
 ...
 'app'
 'djcelery',
 'kombu.transport.django',
)

新建 celery.py 创建一个 celery 应用,并添加以下内容

- project/project/ celery.py:

# 相对路径导入, 防止导入 celery 时冲突
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

# 让 celery 能找到 django 项目
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
# 创建一个 celery 应用
app = Celery('project')

# 导入配置
app.config_from_object('django.conf:settings')
# 自动发现 task
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)
def debug_task(self):

 print('Request: {0!r}'.format(self.request))

 

- project/project/ __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

在 django app 中添加任务,文件名必须是 tasks.py, 在普通 python 函数前加一个 @task() 装饰器就变成了 celery task

-project/app/ tasks.py:

from celery.task import task
from time import sleep

@task()
def helloWorld():
 print 'helloWorld'
 sleep(10)
 print 'helloWorld'
 return 'helloCelery'

这样,一个任务就创建成功了,只剩下在 view 中调用了

-project/app view.py:

from tasks.py import helloWorld

def home():

 helloWorld.delay()

 return HttpResponse('helloCelery')

最后

python manage.py migrate

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
Python enumerate索引迭代代码解析
Jan 19 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
Windows下python3.6.4安装教程
Jul 31 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
python中如何使用分步式进程计算详解
Mar 22 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
使用Rasterio读取栅格数据的实例讲解
Nov 26 Python
Python文本处理简单易懂方法解析
Dec 19 Python
Django CBV模型源码运行流程详解
Aug 17 Python
python 图像增强算法实现详解
Jan 24 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
深入解析Python小白学习【操作列表】
Mar 23 #Python
Python基础之条件控制操作示例【if语句】
Mar 23 #Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 #Python
详解python中sort排序使用
Mar 23 #Python
Python基础之函数的定义与使用示例
Mar 23 #Python
详解用Python练习画个美队盾牌
Mar 23 #Python
详解python中TCP协议中的粘包问题
Mar 22 #Python
You might like
PR值查询 | PageRank 查询
2006/12/20 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Python 登录网站详解及实例
2017/04/11 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
python os.fork() 循环输出方法
2019/08/08 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
智能钱包:Ekster
2019/11/21 全球购物
高中自我鉴定范文
2013/11/03 职场文书
优秀幼教自荐信
2014/02/03 职场文书
网站创业计划书
2014/04/30 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
单位委托书
2014/10/15 职场文书
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android