如何使用Celery在DRF(Django rest framework)中提高服务器并发实现
2018-07-20 20:08
1196 查看
一、原理
首先图片中的客户端代表需要提高并发的服务器,Broker队列通常保存任务,一般使用Redis/RabbitMQ实现,任务处理者便是Celery实例了
如图:celery客户端遇到耗时操作任务的时候,直接将任务发送到Broker(中间人)来协client(任务的发出者)和worker(任务的处理者)。需要注意的是,Celery在DRF中是以单独的应用出现的,拥有自己的空间,一旦client将任务推送Broker,client就会处理其他请求,完成高度并发并不等待client用户io操作。
二、实现
首先我们得安装Celery应用
我们可以使用python的包管理器pip来安装:
pip install -U Celery
也可从官方直接下载安装包:Celery官网
tar xvfz celery-0.0.0.tar.gz cd celery-0.0.0 python setup.py build python setup.py install
1、搭建Celery应用
我们要在项目的同级目录搭建新的独立的Celery应用,首先我们需要创建一个celery_tasks的包,并在celery_tasks/目录下创建main.py作为Celery的启动文件,创建config.py作为Celery的配置文件。同时把我们需要处理的业务(以msg发送短信为例)放到celery_tasks/下,并为其创建tasks.py。注意tasks.py不允许重命名。最终的目录搭建结构如下图
2、main.py
from celery import Celery # 为celery使用django配置文件进行设置,根据自己项目设置 import os if not os.getenv('DJANGO_SETTINGS_MODULE'): os.environ['DJANGO_SETTINGS_MODULE'] = 'meiduo_mall.settings.dev' # 创建celery应用 app = Celery('meiduo') # 导入celery配置 app.config_from_object('celery_tasks.config') # 自动注册celery任务 app.autodiscover_tasks(['celery_tasks.sms'])[/code]
3、config.py
# 配置Celery的Broker队列存放在Redis的14号库中 broker_url = "redis://127.0.0.1/14"[/code]
4、tasks.py
# 加载的日志模块 import logging # 导入Celery实例 from celery_tasks.main import app # 导入发送短信的实例 from .yuntongxun.sms import CCP logger = logging.getLogger("django") # 验证码短信模板 SMS_CODE_TEMP_ID = 1 # 注意只有使用Celery实例装饰的应用才会生效 @app.task(name='send_sms_code') def send_sms_code(mobile, code, expires): """ 发送短信验证码功能实现 :param mobile: 手机号 :param code: 验证码 :param expires: 有效期 :return: None """ try: ccp = CCP() result = ccp.send_template_sms(mobile, [code, expires], SMS_CODE_TEMP_ID) except Exception as e: logger.error("发送验证码短信[异常][ mobile: %s, message: %s ]" % (mobile, e)) else: if result == 0: logger.info("发送验证码短信[正常][ mobile: %s ]" % mobile) else: logger.warning("发送验证码短信[失败][ mobile: %s ]" % mobile)[/code]
5、服务端启动celer_tasks
# 导入Celery具体的应用 from celery_tasks.sms import tasks as sms_tasks class SMSCodeView(GenericAPIView): ... # 发送短信验证码,一定加delay sms_tasks.send_sms_code.delay(mobile, 67868, 5) return Response({"message": "OK"})[/code]
到此位置就完成了Celery在DRF中的发送短信应用的高并发实现
6、启动celery任务
celery -A tasks worker -l info阅读更多
相关文章推荐
- 服务器如何提高并发量
- 使用Select I/O模型来实现一个并发处理多个客户端的TCP服务器
- 使用 django+celery+RabbitMQ 实现异步执行
- Linux网络编程使用多进程实现服务器并发访问
- 如何实现提高UG软件license在企业中的使用效率
- 使用 django+celery+RabbitMQ 实现异步执行
- 如何使用W7100A实现Telnet服务器(二)
- Django中如何使用django-celery完成异步任务2(转)
- 关于windows下django使用celery实现异步调用(RabbitMQ)
- 使用django+celery+RabbitMQ实现异步执行
- 如何使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
- 在即时通信软件中中,如何提高服务器支持的最大连接数/并发数
- Django中如何使用django-celery完成异步任务
- 如何实现提高UG软件license在企业中的使用效率
- 服务器如何提高并发量
- Linux如何查看服务器的并发数? 使用netstat命令查看并发连接数
- 如何使用W7100A实现Telnet服务器(三)
- Django中如何使用django-celery完成异步任务1(转)
- 如何使用IpSec实现服务器之间安全通信
- 使用django+celery+RabbitMQ实现异步执行