Django中使用celery完成异步任务的示例代码


Posted in Python onJanuary 23, 2018

本文主要介绍如何在django中用celery完成异步任务,web项目中为了提高用户体验可以对一些耗时操作放到异步队列中去执行,例如激活邮件,后台计算操作等等 当前项目环境为: django==1.11.8 celery==3.1.25 redis==2.10.6 pip==9.0.1 python3==3.5.2 django-celery==3.1.17

一,创建Django项目及celery配置

1,创建Django项目

1>打开终端输入:django-admin startproject TestCelery 创建django项目('TestCelery'是项目名称)

2>进行TestCelery在终端输入指令:django-admin startapp testcelery 创建应用('testcelery为应用名称')

2, 为celery设置环境变量

1>项目中在TestCelery中创建celery.py文件(与setting.py同级)输入以下内容:         

from celery import Celery
from django.conf import settings
import os

# 为celery设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TestCelery.settings')

# 创建应用
app = Celery('testcelery')

# 酸配置应用
app.conf.update(
  
  # 本地Redis服务器
  BROKER_URL='redis://127.0.0.1:6379/2',
)

app.autodiscover_tasks(settings.INSTALLED_APPS)

2>当前项目目录如下图所示:

 Django中使用celery完成异步任务的示例代码                                

二,创建任务tasks,编写视图View及urls

1, 在testcelery应用中新建tasks.py文件,并写入要进行处理的任务:         

from TestCelery.celery import app
from time import sleep
@app.task
def start_running(nums):
  print('***>%s<***' %nums)
  print('--->>开始执行任务<<---')
  for i in range(10):
    print('>>'*(i+1))
    sleep(1)
  print('>---任务结束---<')

2,编写view视图,并写入调用client的方法

from django.views import View
from django.http import HttpResponse
from .tasks import start_running
from time import sleep
# Create your views here.

class IdexView(View):
  def get(self, request):
    print('>=====开始发送请求=====<')
    for i in range(10):
      print('>>',end='')
      sleep(0.1)

    start_running.delay('》》》》》我是传送过来的《《《《《')
    return HttpResponse('<h2> 请求已发送 </h2>')

3,编写testcelery应用的usrls

from django.conf.urls import url
from .views import *
urlpatterns = [
  url(r'^$', IdexView.as_view()),
]

4,当前项目目录如下图所示:

Django中使用celery完成异步任务的示例代码 

三,运行项目,开启worker

1, 运行项目在当前项目下输入启动服务指令:python manager.py runserver,出现如下图所示即代表运行成功:

Django中使用celery完成异步任务的示例代码

2,开启worker另在当前项目下另打开一个终端,输入指令: celery -A TestCelery worker --loglevel=DEBUG,启动后如下如示:

Django中使用celery完成异步任务的示例代码 

3,调用任务

1>打开浏览器,输入http://127.0.0.1:8000/send/  进行访问

Django中使用celery完成异步任务的示例代码

2> woker监听到任务请求时,就会执行耗时任务,如下图所示:

Django中使用celery完成异步任务的示例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python输出指定月份日历的方法
Apr 23 Python
详解Python中dict与set的使用
Aug 10 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
Python实现的双色球生成功能示例
Dec 18 Python
Django中的ajax请求
Oct 19 Python
python利用thrift服务读取hbase数据的方法
Dec 27 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
django配置app中的静态文件步骤
Mar 27 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 Python
python3 发送任意文件邮件的实例
Jan 23 #Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 #Python
Python实现PS图像明亮度调整效果示例
Jan 23 #Python
matplotlib绘图实例演示标记路径
Jan 23 #Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 #Python
Python实现PS图像抽象画风效果的方法
Jan 23 #Python
matplotlib作图添加表格实例代码
Jan 23 #Python
You might like
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
python实现海螺图片的方法示例
2019/05/12 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
基于Python解密仿射密码
2019/10/21 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
构建高效的python requests长连接池详解
2020/05/02 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
介绍Ibatis的核心类
2013/11/18 面试题
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
2014年国庆标语
2014/06/30 职场文书
布达拉宫的导游词
2015/02/02 职场文书
会计简历自我评价
2015/03/10 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL