一,在python中,创建一个导包文件,例如:celery_task
二,再创建一个py文件,例如:mian.py
三,在py文件中添加基本配置
例:
import os
import sys
from celery import Celery
#执行celery命令时,需要进入CELERY_BASEDIR目录执行
#elery项目中的所有导包地址,都是已CELERY_BASE_DIR未基准设定
CELERY_BASE_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, CELERY_BASE_DIR) # 增加导包路径
#定义celery实例,
#需要的参数:实例名(可以随便取)
#放到redis中:broker(存任务), backend(存任务结果)
app = Celery('opwf', broker='redis://127.0.0.1:6379/14', backend='redis://127.0.0.1:6379/15')
'''
参数介绍:
main=None, loader=None, backend=None,
amqp=None, events=None, log=None, control=None,
set_as_current=True, tasks=None, broker=None, include=None,
changes=None, config_source=None, fixups=None, task_cls=None,
autofinalize=True, namespace=None, strict_typing=True,
**kwargs
'''
#给这个函数装饰上异步
@app.task
def send_sms(tid,mobile,datas):
#需要celery异步执行的代码,例如:发短信,发邮件等
#例如短信:
from ronglian_sms_sdk import SmsSDK
#安装SDK
#pip install ronglian_sms_sdk
accountSid = '8aaf0708762cb1cf017712ffd893508b'
#说明:主账号,登陆云通讯网站后,可在控制台首页中看到开发者主账号ACCOUNT SID。
accountToken = 'bbbbaf29cbd84fa4ac9d1236345d0e5e'
#说明:主账号Token,登陆云通讯网站后,可在控制台首页中看到开发者主账号AUTH TOKEN。
appId = '8aaf0708762cb1cf017712ffd9615091'
#请使用管理控制台中已创建应用的APPID。
#初始化SDK
sdk = SmsSDK(accountSid, accountToken, appId)
#tid:模板编号,测试时默认是1
#mobile:是分给谁,写手机号,字符串类型
#datas:发送的内容,例('验证码','几分钟内输入')
res = sdk.sendMessage(tid, mobile, datas)
print(res)
return res
四,在需要执行的py文件中,导入celery异步
例:
from celery_task.mian import send_sms
#启动celery命令:celery -A 创建的celery文件.py文件,例celery_task.mian worker -l info
#先启动 celery,直接在命令行中执行
#celery -A celery_task.mian worker -l info
#用celery执行发送短信,传递参数
send_sms.delay('1','13996743411',('8888','2'))
五,需要避免的坑
导包的坑
1,当celery异步启动时,可以查看启动的导包路径
2,再看自己的再文件中的导包路径
3,对比两个的路径是否一致,如果不一致,则无法完成celery异步