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 translator使用实例
Sep 06 Python
python的常见命令注入威胁
Feb 18 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
python requests 使用快速入门
Aug 31 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
python+flask实现API的方法
Nov 21 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
python带参数打包exe及调用方式
Dec 21 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
jupyter notebook更换皮肤主题的实现
Jan 07 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
php实现的通用图片处理类
2015/03/24 PHP
jQuery搜索子元素的方法
2015/02/10 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
JavaScript中双向数据绑定详解
2017/05/03 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
python构建基础的爬虫教学
2018/12/23 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
单位办理社保介绍信
2014/01/10 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
本溪水洞导游词
2015/02/11 职场文书
检讨书格式
2015/05/07 职场文书
主持稿开场白
2015/06/01 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
市级三好生竞选稿
2015/11/21 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
python办公自动化之excel的操作
2021/05/23 Python
了解Redis常见应用场景
2021/06/23 Redis