Django中如何使用django-celery完成异步任务 (2)

Django中如何使用django-celery完成异步任务 本篇博文主要介绍在开发环境中的celery使用,请勿用于部署服务器. 许多Django应用需要执行异步任务, 以便不耽误http request的执行. 我们也可以选择许多方法来完成异步任务, 使用Celery是一个比较好的选择, 因为Celery有着大量的社区支持, 能够完美的扩展, 和Django结合的也很好. Celery不仅能在Django中使用, 还能在其他地方被大量的使用. 因此 阅读详情

在上一篇博文中, 我们介绍了如何在开发环境中使用Celery. 接下来我们介绍一下如何在部署环境使用Celery.

1. 简单设置

一个简单的Celery堆有一个queue和一个worker进程组成. 使用以下命令启动worker:

    python manage.py celery worker -B

以上命令是基于django-celery, 当然你也可以celery自身启动worker. 通常我们使用supervisord管理celery worker的启动和重启, 而不是使用手动的方式. supervisord的介绍我们会在今后的文章中作详细介绍. 现在我们只需要知道它是一款进程管理程序即可. 当然, 你也可以选择类似的系统, 例如init.d, upstart, runit或god等.

"-B"参数告诉celery在启动worker时同时启动celery beat, 并使用统一进程, 以便执行定期任务.

在部署服务器上, 我们使用Redis或RabbitMQ作为broker. 而在这一简单的celery堆中, 我们用django数据库储存执行结果, 或干脆忽略结果都可.

2. 完整设置

如果简单设置无法满足我们的需要的话, 我们只需要做一些简单的改变就能完整设置Celery异步任务. 完整设置中, 我们使用多个queue来区分任务优先级. 每个queue我们配置一个不同concurrency设置的worker. beat进程也与worker进程分离出来.

    # 默认 queue
    python manage.py celery worker -Q celery
    # 高优先级 queue. 10个 workers
    python manage.py celery worker -Q high -c 10
    # 低优先级 queue. 2个 workers
    python manage.py celery worker -Q low -c 2
    # Beat 进程
    python manage.py celery beat

注意, 其中high和low只是queue的名字, 并没有其他特殊意义. 我们通过为高优先级的queue配置高concurrency的worker, 使高优先级queue能够使用更多的资源.

同样的, 这些启动命令通过supervisor管理. 至于broker, 我们还是使用Redis或RabbitMQ. 而任务结果则可以储存在Redis或Memcached这些拥有高写入速度的系统中. 如果有必要, 这些worker进程可以移到其他服务器中, 但最好共享一个broker和结果储存系统.

3. 扩展性

我们不能一味的依靠增加额外的worker来提高性能, 因为每个worker都会占用一定的资源. 默认的concurrency设置是, 都多少CPU便创建多少worker, 并为每个worker创建一个新的进程. 将concurrency设置的太高则会很快的榨干服务器的CPU和内存资源.

对于I/O资源需求较大的任务, 我们则可以指定worker使用gevent或eventlet池, 而不是使用更多进程. 这一配置使用的内存资源会大大降低, 同时提升concurrency的性能. 需要注意的是, 但如果我们涉及到的library没有为greenlet打过补丁的话, 很有可能会阻塞所有的任务!

4. 注意

还有需要注意的是django的transaction. transaction根据django的版本和是否已web request形式传入有所不同, 所以你需要自己查阅相关的文档.


Django 使用 Celery 完成异步任务或定时任务 Celery是一个分布式任务队列,由三个主要组件组成:Celery worker、Celery beat 和消息代理(例如 Redis 或 RabbitMQ)。这些组件一起协作,让开发者能够轻松地执行异步任务和定时任务。Celery worker:负责接收任务请求并执行任务。当您在 Django 应用程序中调用 apply_async 方法时,任务将被发送到 Celery worker,然后由 worker 执行。Celery beat:负责调度定时任务。 阅读详情

相关推荐

celery详解(使用django+celery实现异步及定时任务以及使用supervisor进行管理)

最近工作之余,记录一下自己的笔记,首先来介绍一下celery (一)、为什么要使用celery,业务场景 1、我们平时工作中,经常会碰到一个视图里面写了很多逻辑,导致里面有一些很耗时的操作,比如发送邮件、短信之类的操作,这些我们一般是调用第三方sdk去做的,通常客户端接收响应需要等待,降低了服务器的吞吐量及性能 2、服务器难免会有定时任务的需求,比如用户数据更新,缓存清除等等 (二)、celery介绍 为了解决以上问题,我们可以使用celery Celery是一个功能完备即插即用的任务队列。 celery适

mr_zhongjie的博客 1万+

iOS中动态更新补丁策略JSPatch运用基础二

iOS中动态更新补丁策略JSPatch运用基础二 一、引言 上篇博客中介绍了iOS开发中JSPatch引擎进行动态热修复的一些基础功能,其中包括向Objective-C类中添加类方法与成员方法、添加临时成员变量,使用JavaScript调用原生的Objective-C属性和方法等。本篇博客将基于上一篇继续介绍Objective-C中的一些特殊...

weixin_34348111的博客 135

Celery使用异步、定时任务使用

Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度。Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

qq_34960590的博客 1万+

同步异步补充,事件,协程及其相关

阻塞 非阻塞 阻塞: 程序遇到了IO操作 导致代码无法继续执行 交出了CPU执行权 非阻塞: 没有IO操作 或者 即使遇到IO操作 也不阻塞代码执行 阻塞 就绪 运行 指的是应用程序所处的状态 写程序时 要尽量减少IO操作 同步 异步 同步: 发起一个任务后,必须原地等待任务执行结束 拿到一个明确的结果 异步: 发起一个任务后,不需要等待,代...

weixin_44282898的博客 436

Django和Celery实现的异步任务案例

在Django中进行缓存是一种通过存储频繁访问的数据来提高网页应用程序性能的重要技术。 异步任务允许Django应用程序在HTTP请求-响应周期之外执行耗时的操作。这提高了性能和用户体验。 我们将探讨: 1. 在Django中设置Celery。 2. 使用消息代理(Redis)进行任务排队。 3. 创建和运行异步任务。 4. 一个小型项目,集成Celery用于邮件通知。

欧阳天涵的专栏 1417

Django项目中使用celery做异步任务_django中celery实现异步

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

碧海朝天素 1074

使用异步 I/O 大大提高应用程序的性能

转载:http://www.ibm.com/developerworks/cn/linux/l-async/ AIO 简介   Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。 AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I...

weixin_33937499的博客 123

Django 如何使用 Celery 完成异步任务或定时任务

以前版本的 Celery 需要一个单独的库(django-celery)才能与 Django 一起工作, 但从 Celery 3.1 开始,情况便不再如此,我们可以直接通过 Celery 库来完成在 Django 中的任务。

Gefangenes的博客 1057

基础入门_Python-模块和包.Gevent异步/状态获取/超时设置/猴子补丁?

简单介绍:说明: Gevent是一个基于libev的并发库,为各种并发和网络相关的任务提供了整洁的API快速安装:pip install --upgrade gevent主要模式:说明: Greenlet以C扩展模块形式接入PY轻量级协程,它们运行于主进程内部,被协作式的调度,且不同于multiprocessing和threading等真正的并行执行,它在同一时刻只能有一个协...

weixin_33849942的博客 384

无法找到来自源 nvlddmkm 的事件 ID 14 的描述

具体错误是: 无法找到来自源 nvlddmkm 的事件 ID 14 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。 出现这样错误的原因有很多了,有可能是硬件有可能是软件。由于我是刚配置的电脑,起初非常怀疑是自己组装的问题,折腾了好久,心态爆炸!!!先说我报这样错误的情况,以及解决办法,供后面人参考。 ...

SeventhBlue 6万+

从RJPG到温度地图:基于大疆TSDK的热红外数据精准处理与Pix4D拼接实战

本文详细解析了如何利用大疆TSDK将无人机拍摄的热红外RJPG图像精准转换为带有地理坐标的温度TIFF文件,并完成Pix4D拼接生成正射温度地图的全流程。文章重点阐述了辐射定标的原理、TSDK关键参数(测量距离、湿度、发射率、反射温度)的设置与微调方法,以及Pix4D处理中的常见报错解决方案,旨在帮助用户实现从原始数据到可分析温度地图的精准处理。

docker7nomad的博客 464

Python开发运维:Django 4.2.7 使用Celery 5.3.5 完成异步和定时任务

(10)tasks.py文件定义异步或定时任务。(4)urls.py引用视图views。(11)编写配置文件config.py。(22)浏览器再次刷新或回车,进行观察。(15)浏览器刷新或回车,进行观察。(14)view视图添加异步代码。(17) mycelery根目录。(26)查看Redis可视化界面。(7)查看运行结果,点击链接。(20)注释异步任务代码。(21)添加定时任务代码。(1)安装Django。(13)tasks文件。(24)查看RUN结果。(19)查看异步消息。(23)查看定时消息。

cronaldo91的博客 1917

中科蓝讯AB536X/AB892X芯片开发避坑指南:Downloader配置中那些容易忽略的细节

本文详细解析中科蓝讯AB536X/AB892X芯片开发中Downloader配置的关键细节,包括软开关机实现、触摸灵敏度调试、量产校频等常见问题。特别针对无PR口芯片的替代方案、触摸参数优化、校频流程等易忽略环节提供实用解决方案,帮助开发者规避量产风险,提升开发效率。

weixin_30687051的博客 476

django完成天天生鲜用户注册

登录注册会用户django自带的用户认证体系 首先:安装celery (我的版本3.1.26.post2),安装redis(2.10.1) 如果版本不对可能会报错 pip install celery pip install redis 注册功能 使用类视图,因为他自带了get和post等函数,可以不用判断前端method from django.views import View class ...

ouersl的博客 649

javaFx + SpringBoot 启动时报错:No auto configuration classes found in META-INF/spring.factories 解决方法

javaFx+SpringBoot+(de.roskenet:springboot-javafx-support:2.1.6)开发。 直接在idea中运行正常,但打包成jar,之后使用java -jar xxx.jar启动报错,发现日志中有: java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. 以及 at de.felixroske.jfxsuppo

long117long的专栏 4612

从选型到调试:MCU外部晶振电路设计的实战避坑指南

本文详细解析了MCU外部晶振电路设计的关键要点,从选型到调试提供全面指南。重点探讨了晶振频率选择、负载电容计算、PCB布局优化等核心问题,并分享常见故障排查技巧与EMC设计经验,帮助工程师规避设计陷阱,提升嵌入式系统时钟稳定性。

weixin_30872577的博客 278

使用celery进行异步处理和定时任务(django)

在django中使用celery进行异步处理和定时任务

一个持续学习的小趴菜。 2892

Xilinx Blockset Counter计数器模块使用及参数配置

本文详细介绍了Simulink中Xilinx Blockset库Counter模块的使用以及参数说明。

白码王子小张的博客 1096

Django 中celery的使用

1、django应用Celery django框架请求/响应的过程是同步的,框架本身无法实现异步响应。 但是我们在项目过程中会经常会遇到一些耗时的任务, 比如:发送邮件、发送短信、大数据统计等等,这些操作耗时长,同步执行对用户体验非常不友好,那么在这种情况下就需要实现异步执行。 异步执行前端一般使用ajax,后端使用Celery。 2 、项目应用 django项目应用celery,主要有两种任务方式,一是异步任务(发布者任务),一般是web请求,二是定时任务。 celery组成请看celery介

qq_53582111的博客 1万+

发那科机器人抓手与物料搬运阀的配置与优化实践

本文详细介绍了发那科机器人抓手与物料搬运阀的配置与优化实践,包括基础配置指南、阀岛与输入模块的详细设置、测试程序编写与验证技巧,以及常见问题排查与性能优化建议。通过实际案例和经验分享,帮助技术人员快速掌握关键配置步骤,提升物料搬运系统的稳定性和效率。

weixin_33738555的博客 385

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

celery:celery介绍、架构、基本使用,celery执行异步任务、延迟任务、定时任务,django中使用celery。

celery介绍、架构、基本使用,celery执行异步任务、延迟任务、定时任务,django中使用celery。

WorldMvp的专栏 8011

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Django中使用Celery完成异步任务,并实时监控

Django使用异步任务

gbfeng123的博客 3693

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Django中使用celery实现定时任务和异步任务

Django使用celery实现定时任务和异步任务

fresh_nam的博客 4857

python3.7 中使用django-celery 完成异步任务

本文是在学习了慕课网中 “Python 异步任务队列 Celery 使用”课程后记录下来的笔记。由于笔者使用的python版本是python 3.7,所以直接需要在老师的代码基础上进行一定的修改,才能适配当前的环境。 环境: python: python3.7 django: 2.1.5 celery: 4.2.0 django-celery: 3.2.2 flower: 0.9.2 ko...

三月神的专栏 6117
上一篇: Django中如何使用django-celery完成异步任务 (1)
下一篇: web 服务负载、基本优化架构
youbo_sun
博客等级 码龄12年 20粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值