Celery介绍:
消息队列(broker)
在客户端
和消费者
之间进行协调。安装Celery:
$ pip install -U Celery
# 导入Celery from celery import Celery # 创建Celery实例 celery_app = Celery("meido")
# 指定消息队列的位置 broker_url= 'redis://127.0.0.1:6379/10'
broker_url为固定写法
启动文件中添加加载配置文件的代码:
# 导入Celery from celery import Celery # 创建Celery实例 celery_app = Celery("meido") # 加载配置 celery_app.config_from_object("celery_tasks.config")
创建sms包并定义tasks.py文件:
在tasks.py文件中定义任务:
from celery_tasks.sms.yuntongxun.ccp_sms import CCP from . import constants from celery_tasks.main import celery_app # name:异步任务别名 @celery_app.task(name='ccp_send_sms_code') def ccp_send_sms_code(mobile, sms_code): """ 发送短信异步任务 :param mobile: 手机号 :param sms_code: 短信验证码 :return: 成功0 或 失败-1 """ send_ret = CCP().send_template_sms(mobile, [sms_code, constants.SMS_CODE_REDIS_EXPIRES // 60], constants.SEND_SMS_TEMPLATE_ID) return send_ret
@celery_app.task对应celery实例的task装饰器
启动文件main.py中注册任务
# 导入Celery from celery import Celery # 创建Celery实例 celery_app = Celery("meido") # 加载配置 celery_app.config_from_object("celery_tasks.config") # 注册任务 celery_app.autodiscover_tasks(["celery_tasks.sms"])
虚拟环境下:
cd ~/projects/meiduo_project/meiduo_mall
celery -A celery_tasks.main worker -l info
window系统下,可能出现消息不消费情况,此时,需要使用如下命令启动:
celery -A celery_tasks.main worker --pool=solo -l info
说明:
-A
指对应的应用程序, 其参数是项目中 Celery实例的位置。worker
指这里要启动的worker。-l
指日志等级,比如info
等级。启动日志如下:
(py3_django) D:\work\meiduo-project\meiduo_mall>celery -A celery_tasks.main worker --pool=solo -l info -------------- celery@DESKTOP-OT3BAUF v5.0.5 (singularity) --- ***** ----- -- ******* ---- Windows-10-10.0.18362-SP0 2021-03-08 22:58:31 - *** --- * --- - ** ---------- [config] - ** ---------- .> app: meido:0x16406930a90 - ** ---------- .> transport: redis://127.0.0.1:6379/10 - ** ---------- .> results: disabled:// - *** --- * --- .> concurrency: 4 (solo) -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) --- ***** ----- -------------- [queues] .> celery exchange=celery(direct) key=celery [tasks] . ccp_send_sms_code [2021-03-08 22:58:31,180: INFO/MainProcess] Connected to redis://127.0.0.1:6379/10 [2021-03-08 22:58:31,180: INFO/MainProcess] mingle: searching for neighbors [2021-03-08 22:58:32,211: INFO/MainProcess] mingle: all alone [2021-03-08 22:58:32,211: INFO/MainProcess] celery@DESKTOP-OT3BAUF ready.
# 发送短信验证码 # CCP().send_template_sms(mobile,[sms_code, constants.SMS_CODE_REDIS_EXPIRES // 60], constants.SEND_SMS_TEMPLATE_ID) # Celery异步发送短信验证码 ccp_send_sms_code.delay(mobile, sms_code)
说明:
控制台显示的Celery服务接收任务并执行的日志:
(py3_django) D:\work\meiduo-project\meiduo_mall>celery -A celery_tasks.main worker --pool=solo -l info -------------- celery@DESKTOP-OT3BAUF v5.0.5 (singularity) --- ***** ----- -- ******* ---- Windows-10-10.0.18362-SP0 2021-03-08 22:58:31 - *** --- * --- - ** ---------- [config] - ** ---------- .> app: meido:0x16406930a90 - ** ---------- .> transport: redis://127.0.0.1:6379/10 - ** ---------- .> results: disabled:// - *** --- * --- .> concurrency: 4 (solo) -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) --- ***** ----- -------------- [queues] .> celery exchange=celery(direct) key=celery [tasks] . ccp_send_sms_code [2021-03-08 22:58:31,180: INFO/MainProcess] Connected to redis://127.0.0.1:6379/10 [2021-03-08 22:58:31,180: INFO/MainProcess] mingle: searching for neighbors [2021-03-08 22:58:32,211: INFO/MainProcess] mingle: all alone [2021-03-08 22:58:32,211: INFO/MainProcess] celery@DESKTOP-OT3BAUF ready. [2021-03-08 22:59:23,983: INFO/MainProcess] Received task: ccp_send_sms_code[9734a0d8-312d-478c-a9a7-a5faa090c7cd] [2021-03-08 22:59:24,295: WARNING/MainProcess] result [2021-03-08 22:59:24,295: WARNING/MainProcess] {'statusCode': '000000', 'templateSMS': {'smsMessageSid': '3430d32c8b77402da44a220994c1abb7', 'dateCreated': '202103 08225903'}} [2021-03-08 22:59:24,295: WARNING/MainProcess] 0 [2021-03-08 22:59:24,295: INFO/MainProcess] Task ccp_send_sms_code[9734a0d8-312d-478c-a9a7-a5faa090c7cd] succeeded in 0.3129999999998745s: 0
联系客服