celery学习:http://docs.jinkan.org/docs/celery/

什么是celery?

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。它专注于实时处理的任务队列,同时也支持任务调度。

什么地方可以用到celery?(基础的两个用处)

  1. 用户发起request,并且要等待response返回,但是在视图中有一些耗时的操作,导致用户可能会等待很长时间才能接受response,用户体验差,我们把耗时操作放在celery中执行,便可解决这个问题(处理耗时操作,因为celery 可异步分布式地异步处理任务)
  2. 网站每隔一段时间要同步一次数据,但http请求时是需要触发的,我们可以通过celery定时执行来解决这个问题(处理数据同步,因为celery可定时执行任务)

安装celery:

pip install celery
pip install celery-with-redis
# 该命令会自动安装redis(python库操作redis的库)、celery、kombu、billiard、amqp、vine和celery-with-redis相关库
pip install django-celery

celery操作名词:

任务 (tssk) 本质是一个python函数,将耗时操作封装成了一个函数
队列 (queque) 将要执行的任务放队列里
工人(worker) 负责执行队列中的任务
代理(broker) 负责调度,在部署环境中使用redis

今天我们主要进行的是耗时操作的处理:

在django中配置celery:

1.在settings.py 文件的INSTALLED_APPS中添加 'djcelery' ,即INSTALLED_APPS=['djcelery',]

2.在settings.py 文件最下方添加如下代码:

# 配置celery
import djcelery
djcelery.setup_loader() # 初始化队列
# 中间人redis的端口号/数据库号
BROKER_URL = 'redis://:redis密码@127.0.0.1:6379/0' # 0 : 表示使用的是redis第0个库
# redis为中间人,若不设置中间人,会提示无法连接中间人的错误
# 中间人:celery执行过程中的数据支持
# celery 内容等消息的格式设置
CELERY_ACCEPT_CONTENT = ['application/json',]
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
# selery 时区设置,使用settings中国TIME_ZONE同样的时区
CELERY_TIMEZONE = TIME_ZONE
CELERY_IMPORTS = ('myapp.task',) # 用一个元组表示:myapp项目下的task.py文件
# 在应用级myapp下创建task.py文件用于存放task任务函数

3. 在应用级myapp 下创建task.py文件

4. 迁移文件:

  生成celery需要的数据库表(直接迁移不用生成迁移文件:python manage.py migrate)

5.创建celery.py文件

  在工程目录(项目级目录)下的mydiango下创建一个celery.py文件

  

6.在celery.py文件copy如下内容进去(注:因为celery-with-django版本限制,安装的celery版本不同,这里配置的内容可能会不同):

from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'whthas_home.settings')
app = Celery('portal')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) @app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))

配置文件

7.在工程目录下的mydiango下的__init__.py(即创建celery.py的工程目录下)中配置如下内容:

from .celery import app as celery_app

celery处理耗时操作:

首先,我们有一个耗时操作:

利用time模块在返回页面前加上sleep模拟耗时操作(注:自行配制urls.py与html文件):

# views.py
# celery 耗时任务
import time
def celery(request):
time.sleep(5) # 延时5秒再执行后面的操作
return render(request,'myapp/celery.html')

经验证页面需要5秒后才能返回!!

耗时操作的处理:

在进行上面的celery配置后!!

1.将上面的耗时任务剪切到我们建立的task.py文件中,让其成为celery任务。

2.在原有的方法上添加装饰器@task 或者@celery_app.task

# task.py

from celery import taskimport time

@task           # @celery_app.task
def text_celery():
time.sleep(5) # 延时5秒再执行后面的操作

3.在原有的views.py文件中引用task.py 文件对应方法:

from .task import test_celery

def cite_celery(request):
test_celery.delay() # 耗时操作的处理
return render(request,'myapp/celery.html')

对应url

    path('celery/',views.cite_celery)

注:在使用celery时,可能会出现kombu错误,可能的原因是版本不一致的情况,解决:

https://blog.csdn.net/cn_1937/article/details/91992075

python_django_celery的初步使用的更多相关文章

  1. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  2. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  3. Android自定义View初步

    经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...

  4. 初步认识Node 之Node为何物

    很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了.    Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...

  5. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  6. 基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  7. Azure底层架构的初步分析

    之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...

  8. CozyRSS开发记录14-RSS源管理初步完工

    CozyRSS开发记录14-RSS源管理初步完工 1.添加源的响应 DialogHost.Show有几个版本的重载,加一个DialogClosingEventHandler参数.我们让添加源对话框的添 ...

  9. 初步了解CPU

    了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. ...

随机推荐

  1. 四、yml文件的写法

    1.创建一个新的工程 注意:只有properties文件,没有包含yaml文件 2.创建一个yml文件 全局配置配置文件,文件名是固定的application 作用:修改SpringBoot自动配置的 ...

  2. redis笔记3-命令

    通用命令:keys * --查询所有keykeys list* --查询list开头的keytype key1 --查询键对应的value类型del key --删除指定的keyttl key --查 ...

  3. 记录下通过Java代码打开cmd启动appium server及在使用过程中碰到的问题

    1.appium server启动后,执行测试脚本,appium日志报错,提示appium setting未安装(原因是小米手机在用appium desktop调试时总是提示是否安装appium se ...

  4. openwrt增加密码及ssh的方法

    openwrt增加密码及ssh的方法 1.进入openwrt系统源码的顶层目录,然后执行 make menuconfig命令进入 Network--> SSH-->  <*>o ...

  5. 每天一个linux命令:file(11)

    file file命令用来探测给定文件的类型.file命令对文件的检查分为文件系统.魔法幻数检查和语言检查3个过程. 格式 file [选项] [参数] 参数选项 参数 备注 -b 列出辨识结果时,不 ...

  6. Mybatis缓存+配置

    mybatis提供了缓存机制减轻数据库压力,提高数据库性能 mybatis的缓存分为两级:一级缓存.二级缓存 一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效 二级缓 ...

  7. Python--数据类型与变量(列表、元祖、字典)

    今天我们来看Python中3种內建的数据结构:列表.元祖和字典 列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素特性:1.可存放多个值2.可修改指定索引位置对应的值,可变 ...

  8. PHP disk_free_space() 函数

    定义和用法 disk_free_space() 函数返回指定目录的可用空间,以字节为单位. 语法 disk_free_space(directory) 参数 描述 directory 必需.规定要检查 ...

  9. Android中可以做的两件坏事---破解锁屏密码和获取Wifi密码

    之前的文章一直在介绍OC,最近也是在找急忙慌的学习IOS,所以Android方面的知识分享就有点中断了,但是我现在还是要靠Android吃饭,所以不能Android的工作不能停呀,今天咋们来看一下我在 ...

  10. Docker Machine 管理-创建machine(16)

    对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机.“创建 Machine” 指的就是在 host 上安装和部署 docker.先执行 doc ...