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 相关文章推荐
python3.6使用pymysql连接Mysql数据库
May 25 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
Python 从相对路径下import的方法
Dec 04 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 Python
JupyterNotebook 输出窗口的显示效果调整方法
Apr 13 Python
python如何求100以内的素数
May 27 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 Python
Python如何telnet到网络设备
Feb 18 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 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
php中用文本文件做数据库的实现方法
2008/03/27 PHP
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
python复制文件的方法实例详解
2015/05/22 Python
Django中间件实现拦截器的方法
2018/06/01 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
如何把python项目部署到linux服务器
2020/08/26 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
远程研修随笔感言
2014/02/10 职场文书
年级组长自我鉴定
2014/02/22 职场文书
小学校长竞聘演讲稿
2014/05/16 职场文书
2014年党务工作总结
2014/11/25 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
Vue深入理解插槽slot的使用
2022/08/05 Vue.js