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的面向对象思想分析
Jan 14 Python
关于Python数据结构中字典的心得
Dec 04 Python
使用python编写简单的小程序编译成exe跑在win10上
Jan 15 Python
python协程之动态添加任务的方法
Feb 19 Python
实例讲解Python3中abs()函数
Feb 19 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
Python多线程正确用法实例解析
May 30 Python
使用pytorch 筛选出一定范围的值
Jun 28 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
Python之字典添加元素的几种方法
Sep 30 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 31 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/11/09 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
JS实现“全选”和"全不选"功能代码实例
2020/02/06 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
python super函数使用方法详解
2020/02/14 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
python如何实现递归转非递归
2021/02/25 Python
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
一般党员对照检查材料
2014/09/24 职场文书
道歉的话怎么说
2015/05/12 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书