踩坑记录
1.celery高版本不兼容windows,因此需要pip install eventlet来兼容windows
因此在启动celery时执行命令式
celery -A meiduo_mall worker -l info -P eventlet
补充:celery worker工作模式
celery -A celery_tasks.main worker -l info -P eventlet -c 1000 #将进程改变为协程
celery模块结构
main.py
# Celery入口文件
from celery import Celery
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','meiduo_mall.settings_real.dev')
# 创建celery实例(生产者)
celery_app = Celery('meiduo_mall')
# 加载配置
celery_app.config_from_object('celery_tasks.config')
# 注册任务
celery_app.autodiscover_tasks(['celery_tasks.sms'])
config.py
# celery 配置文件
# 指定中间人
broker_url = 'redis://192.168.xx.xx:6379/10'
tasks.py
# 定义任务
from celery_tasks.sms.yuntongxun.ccp_sms import CCP
from . import constants
from celery_tasks.main import celery_app
# 使用装饰器装饰异步任务,保证celery识别任务
@celery_app.task(name='send_sms_code')
def send_sms_code(mobile,sms_code):
send_ret = CCP().send_template_sms(mobile, [sms_code, constants.SMS_CODE_REDIS_EXPIRES // 60], constants.SEND_SMS_TEMPLATE_ID)
return send_ret
工程文件中配置