python celery应用场景_python celery 模块

Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度

Celery是典型的生产生-消费者模式,主要由三部分组成:broker(消息队列)、workers(消费者:处理任务)、backend(存储结果)

1.编写任务代码task.py

from celery import Celery

app = Celery('tasks',broker='amqp://guest@localhost//', backend='redis://localhost:6379/0')

@app.task

def add(x, y):

return x + y

当函数使用”@app.task”修饰后,即为可被Celery调度的任务

2.启动workers 命令 celery worker -A tasks --loglevel=info --concurrency=5

3.调用任务

result=add.delay(2, 5)

result.ready()

result.get(timeout=1)

4.配置文件

单个参数配置:

app.conf.CELERY_BROKER_URL = 'amqp://guest@localhost//'

app.conf.CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

多个参数配置:

app.conf.update(

CELERY_BROKER_URL = 'amqp://guest@localhost//',

CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

)

从配置文件中获取:

先把配置存入配置文件中'celeryconfig.py'

BROKER_URL='amqp://guest@localhost//'

CELERY_RESULT_BACKEND='redis://localhost:6379/0'

导入到celery 对象中app.config_from_object('celeryconfig')

我们之前调用任务使用了”delay()”方法,它其实是对”apply_async()”方法的封装,

使得你只要传入任务所需的参数即可

关于序列化

Celery默认序列化方式是”json”,指定序列化

app = Celery('tasks', broker='...', task_serializer='yaml')

app.conf.update(

CELERY_TASK_SERIALIZER='pickle',

CELERY_RESULT_SERIALIZER='json',

)

@app.task

def add(x, y):

...

add.apply_async((2, 5), serializer='json')

django + celery 实现任务的异步处理

1.Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下:http请求发起 -- http handling(request解析) -- url mapping(url正则匹配找到对应的View) -- 在View中进行逻辑的处理、数据计算(包括调用Model类进行数据库的增删改查)--将数据推送到template,返回对应的template/response

同步请求:所有逻辑处理、数据计算任务在View中处理完毕后返回response。在View处理任务时用户处于等待状态,直到页面返回结果

异步请求:View中先返回response,再在后台处理任务。用户无需等待,可以继续浏览网站。当任务处理完成时,我们可以再告知用户

2.建立消息队列

消息队列可以使用RabbitMQ、Redis 等

3.安装django-celery

pip install celery django-celery

4.配置settings.py

import djcelery

djcelery.setup_loader()

BROKER_URL = 'django://' # 使用django做broker

CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 定时任务.

CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend' # 需要跟踪任务的状态时保存结果和状态

CELERY_ENABLE_UTC = False # 不用UTC.

CELERY_TIMEZONE = 'Asia/Shanghai' # 指定上海时区

CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] # 允许的格式

CELERY_TASK_SERIALIZER = 'json'

CELERY_RESULT_SERIALIZER = 'json'

CELERY_IGNORE_RESULT = True

INSTALLED_APPS = [

'djcelery',# 新增

'kombu.transport.django', # 新增kombu.transport.django则是基于Django的broker

]

其中,当djcelery.setup_loader()运行时,Celery便会去查看INSTALLD_APPS下包含的所有app目录中的tasks.py文件,找到标记为task的方法,将它们注册为celery task

5.在项目 mysite 下新建celery.py

from future import absolute_import

import os

from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')

from django.conf import settings # noqa

app = Celery('mysite')

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))

6.在应用celery_project下新建tasks.py

from future import absolute_import

from celery import shared_task

import time

@shared_task(track_started=True)

def add(x, y):

time.sleep(30)

return x + y

在tasks.py中我们就可以编码实现我们需要执行的任务逻辑,在开始处import task,然后在要执行的任务方法开头用上装饰器@task。需要注意的是,与一般的.py中实现celery不同,tasks.py必须建在各app的根目录下,且不能随意命名

6.生产任务

在需要执行该任务的View中,通过test.delay的方式来创建任务,并送入消息队列

def produce():

a =1

b =2

r = test.delay(a,b)

7.启动work

#先启动服务器 python manage.py runserver

#再启动worker celery worker -A mysite -c 4 --loglevel=info

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 使用LibreOffice 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件

接上一篇:linux环境源码安装unoconv Linux环境_源码安装Unoconv实现文件在线预览doc,doxc,xls,xlsx,ppt,pptx 文件 https://gblfy.blog.csdn.net/article/details/103540694 接上一篇:linux环境…

裸辞面11家python公司,拿到4个offer!网友:买了简历置顶会员吗?

我一直认为,敢裸辞的只有2种人:1、能力足够强,即使裸辞也不会被财务问题所困,更不愁找工作。2、年轻气盛,遇到傻X领导和傻X同事,绝对0容忍!但是最近我在刷某乎的时候,发现了第三种人…

万用表怎么测电池内阻_数字万用表和指针万用表,两者怎么选?

​万用表又称为复用表、多用表、三用表、繁用表等,一般以测量电压、电流和电阻为主要目的。是一种多功能、多量程的测量仪表,可测量直流电流、直流电压、交流电流、交流电压、电阻和音频电平等,有的还可以测交流电流、电容量、电感量及半导体…

在Linux系统上安装Git

Git是目前流行的非常好用的版本控制工具,这里介绍两种安装方式,1、yum安装,2、从github上下载最新的源码编译后安装 文章目录一、yum安装二、从GitHub上下载最新的源码编译后安装1、下载tar包2、上传tar包3、解压压缩包4、进入到解压后的文件…

Michael Jordan:当下的AI其实都是伪“AI”

摘要: Michael Jordan认真的解读当下的AI到底是什么?人工智能(AI)是未来的趋势,这句话是技术人员、学者、记者和风险投资家一致赞同的。如同从技术学术领域跨越到普遍行业的许多词语一样,在使用这些词语的时…

如何提升员工体验 助力企业业务增长?这个棘手的问题终于被解决了!

戳蓝字“CSDN云计算”关注我们哦!相信大部分人都经历过入职第一天的手忙脚乱与无所适从,一份新的工作本就是一项全新的挑战,各种设备的安装与链接、安装适应任何新任务的应用流程,以及令人头疼的各种密码,凡此种种都为…

java 牛生小牛_例题:大牛生小牛的问题解决方法

问题:一只刚出生的小牛,4年后生一只小牛,以后每年生一只。现有一只刚出生的小牛,问20年后共有牛多少只?思路:这种子生孙,孙生子,子子孙孙的问题,循环里面还有循环的嵌套循环&#x…

Git 报错bad default revision 'HEAD'

重新提交一次记录就好了

vb 打印机 任意尺寸_创新小黑管“省心省力”惠普Laser NS 1020 智能闪充激光打印机...

对于小型公司、个人工作室或者有打印需求的家庭用户来说,一款优秀的轻巧、便携的打印机必不可少。前不久,惠普推出了全新一代惠普Laser NS 1020打印机,采用突破性的智能闪充碳粉技术,可实现15秒充粉,简便省时&#xff…

隐私与机器学习,二者可以兼得吗?

摘要: 隐私数据与机器学习看似矛盾,其实不然。如何有效保护机器学习训练中的隐私数据?谷歌专家给出了答案——PATE框架,就算你不太懂隐私保护的知识,也可以通过PATE框架来保护机器学习里的训练数据。最近关于互联网隐私…

SpringBoot 深度调优,让你的项目飞起来!

文章目录项目调优一、修改配置文件项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情。 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。 一、修改配置文件 关于修改配置文件application.properties。 …

青年PM倪超:想让程序员多一点点幸福感

摘要: 本文主人公倪超,在内部,同事都习惯叫他花名银时,是阿里云产品经理。前不久,他所负责的企业级分布式应用服务EDAS,荣获了公司2018财年年度最佳产品奖。在五四青年节来临之际,我们有幸近距离…

C语言--if...else语句【语法讲解】

一.if...else语句的介绍 if…else 语句是编程中常用的一种分支语句,用于根据条件执行不同的操作。 它的基本语法如下: if (条件表达式) {// 当条件表达式为真时执行的代码块 } else {// 当条件表达式为假时执行的代码块 } 当条件表达式为真时&#xff…

黑苹果找不到触控板_猫和老鼠手游:好友位不足却找不到人开黑?玩家给好友系统支招...

猫追鼠,鼠躲猫,欢乐互动乐逍遥,欢迎你来到猫和老鼠游戏学院第126期。随着开学季的到来,我们在游戏中会发现一个有趣的现象:任何时候打开自己的好友界面,里面都是灰色一片,不可否认这确实和玩家群…

java 三目算法_Java 中的三目运算符

写在前面:三目运算符是我们经常在代码中使用的,a (bnull?0:1); 这样一行代码可以代替一个 if-else,可以使代码变得清爽易读。但是,三目运算符也是有一定的语言规范的。在运用不恰当的时候会导致意想不到的问题。前段时间遇到(一个…

Serverless 的喧哗与骚动

戳蓝字“CSDN云计算”关注我们哦!导读:从 2016 年 AWS 发布 Lambda 以来,全世界的开发者和云厂商对 Serverless 的热情在不断高涨。假设不想在开发应用程序并将其部署在服务器上的过程细节上花费精力,是否有一种简单的架构模型能够…

2018年最佳深度学习书单

摘要: AI人才缺口巨大?如果你想成为AI革命中的一员,那么你就必须要学习深度学习,看看这12本书,它们将成为你的利器!我相信你应该知道人工智能,尤其是深度学习在过去5年左右取得了不错的进步。 深…

(需求实战_01)_shell脚本 ftp协议下载文件

文章目录一、需求文档说明二、脚本解释/说明三、脚本内容3.1. 案例脚本3.2. 案例脚本升级一、需求文档说明 序号要求说明①协议使用ftp协议远程下载②文件类型.zip③文件名ac_UPpp④远程下载目录用户根目录(不需要切换目录)⑤本服务器下载存放目录/blacklist/xmldata/Lists 二…

双绞线传输距离_视频监控系统中布线常用传输线缆分类及制作方法

同轴电缆:同轴电缆同轴电缆可分为两种基本类型,基带同轴电缆和宽带同轴电缆。目前基带是常用的电缆,其屏蔽线是用铜做成的网状的,特征阻抗为75(如RG-8、RG-58等);宽带同轴电缆常用的电缆的屏蔽层通常是用铝冲压成的&am…

国庆出游,这个银行卡大小的充电宝一定要带

说到充电宝,不知道有没有人跟我有同样的烦恼:5000毫安容量小,不够用。10000毫安容量够用,但又大又笨重,拿在手里充电超累的,还占地方!尤其是旅行出差的时候,这种体验更加明显&#x…