这是使用celery异步发送短信的方法

安装celery以及redis

1
2
pip install celery==3.1.2
pip install redis==2.1.6

在setting中配置celery

配置broker消息队列的地址(我是在setting中配置的)

1
2
3
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://123.57.61.168:6379'

创建一个tasks.py的文件 写异步代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from celery.task import task
from ronglian_sms_sdk import SmsSDK
import time

# 这是发送短信的服务部分
ACCOUNT_SID = ''
AUTH_TOKEN = ''
APP_ID = ''

def sdk(ACCOUNT_SID, AUTH_TOKEN, APP_ID):
return SmsSDK(ACCOUNT_SID, AUTH_TOKEN, APP_ID)


@task # 升级为异步的标志
def send(sms, tid=1, mobile=[], datas=[]):
# time.sleep(5)
tid = tid # 登录验证模版 默认ID为1
mobile = ','.join(mobile) if len(mobile) > 1 else mobile[0] # 接收的手机号列表
datas = datas
sms.sendMessage(tid, mobile, datas)

接下来就可以在view中发送短信了

send.delay 发送短信

1
2
3
4
5
6
7
sms = sdk(ACCOUNT_SID, AUTH_TOKEN, APP_ID)
a = random.sample([str(i) for i in range(10)], 6)
code = ''.join(a)
r.set(phone, code, 60)
datas = [code, '60s']
send.delay(sms, mobile=[phone], datas=datas)
# 直接加入消息队列,由celery去管理

需要运行两个终端 一个程序 一个异步的终端

1
py manage.py celery worker