什么是celery?
帮助开发者解决调用第三方或者校验过程中的网络延迟问题,或者等待造成的客户端不好的体验
celery是python里面提供的包,这个包叫做异步任务队列,可以用它实现异步任务
避免因延时等问题影响主线程任务的等待
celery的特点
任务发出者和处理者可以分布在不同的电脑上,通过中间人进行信息的交换
任务队列中的任务会进行排序,先添加的任务会被先执行
怎么使用celery
创建celery对象并配置中间人地址`
# 引入
from celery import Celery
# 创建celery对象,
# 参数一: 随意起的名称 例如这里的demo
celery_app = Celery('demo')
配置
配置文件: broker_url = '中间人的地址'
celery_app.config_from_object('配置文件路径')
定义任务函数
# 我们这里需要使用上面定义好的对象, 装饰任务
# 这里有个参数: name='当前任务的名称' 这里当前任务的名称可以随便起
@celery_app.task(name='my_task')
def my_task(a, b):
print('任务函数被执行')
...
启动celery,任务进行监听
celery -A 'celery_app文件路径' worker -l info
– celery :只要我们装完这个包,就是这个命令
– -A:指定了后面的celery_app文件的路径
– worker: 代表启动了工作
– -l: 一旦工作起来就会启动日志,使用这个参数指定日志的级别
– info: 日志级别
-发出任务
# 注意: 任务一定要调用 delay() 函数
my_task.delay(2, ,3)
邮箱的使用
class gpassword(APIView):
def post(self,request):
qqyx=request.data.get('qqyx')
print(qqyx,'111555555')
import random
sui = random.randint(100000, 999999)
send_mail(subject="新希望集团激活邮件", # 标题
message="hellow word", # 内容
recipient_list=[qqyx], # 收件人`
from_email=EMAIL_HOST_USER, # 发件人
html_message="验证码是%d,5分钟内邮箱" % sui) # 能识别html标签
redis_client = get_redis_connection('img_code')
redis_client.setex(qqyx, 60 * 5, sui)
return Response({'msg':'发送成功'})
def put(self,request):
qqyx=request.data.get('qqyx')
username=request.data.get('username')
password=request.data.get('password')
yan=request.data.get('yan')
redis_client = get_redis_connection('img_code')
re=redis_client.get(qqyx).decode('utf8')
if re!=yan:
return Response({'msg':'验证码错误'})
try:
uu=User.objects.get(email=qqyx,name=username)
uu.passwrod=password
uu.save()
return Response({'msg':'修改成功'})
except Exception as e:
return Response({'msg':'用户名或qq邮箱输入错误'})
配置
EMAIL_HOST = "smtp.qq.com" # QQ的邮箱服务器 主键
EMAIL_PORT = "25" # 服务端 进程端口号
EMAIL_HOST_USER = "2738491825@qq.com"
EMAIL_HOST_PASSWORD = "nmxnkouywhizdegc" # 设置授权码 不要直接写密码