2020/11/04:celery相关知识

2020/11/04:celery相关知识

celery流程

在这里插入图片描述

处理异步–django-celery:

  • 推荐使用版本:

"""
Django == 2.2.6
django-celery == 3.3.1
django-redis == 4.11.0
redis == 2.10.6
celery == 3.1.26
"""
  • 配置settings.py:

import django

djcelery.setup_loader()
BROKER_URL = "redis://127.0.0.1:6379/2"

INSTALLED_APPS = [
    ...
    "djcelery",
    ...

]
  • 创建celery所需的数据表:

python manage.py migrate
#如若不成功可以尝试一下命令语句
#python manage.py syncdb
  • 创建tasks.py:

在这里插入图片描述

  • 使用tasks.py:

from celery import task

@task
def add(x, y):
    return x * y

a、当settings.py中的djcelery.setup_loader()运行时, Celery便会查看所有INSTALLED_APPS中app目录中的tasks.py文件, 找到标记为task的function, 并将它们注册为celery task.

b、在执行djcelery.setup_loader()时, task是以INSTALLED_APPS中的app名, 加.tasks.function_name注册的

c、一次需要注意 在impprt task时, 需要保持一致

d、如果我们由于python path不同而使用不同的引用方式时(例如在tasks.py中使用from myproject.myapp.tasks import add形式), Celery将无法得知这是同一task, 因此可能会引起奇怪的bug。

  • 任务变为异步:

from userapp.tasks import add

class TestCeleryView(APIView):
    def get(self,request):

        data = add.delay(2,10)  #delay是注册为celery异步任务的关键点

        return Response({"code":200})
  • 启动celery:

# 先启动Django任务在启动celery服务
# python manage.py celery worker --loglevel=info

注册:

class RegisterUserView(APIView):
    def post(self, request):
        username = request.data.get('username')
        password = request.data.get('password')
        phone = request.data.get('phone')
        code = request.data.get('code')
        if not all([username, password, phone, code]):
            return Response({
                'code': 4003,
                'msg': '数据不完整!'
            })
        redis_cli = get_redis_connection('image_code')
        redis_phone_code = redis_cli.get(phone).decode()
        if redis_phone_code != code:
            return Response({
                'code': 4005,
                'msg': '验证码错误!'
            })
        user_ser = UserSerializer(data=request.data)
        if user_ser.is_valid():
            user_ser.save()
            return Response({
                'code': 200,
                'msg': '注册成功!'
            })
        else:
            return Response({
                'code': 500,
                'msg': "注册失败!",
                'data': user_ser.errors,
            })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值