30-Celery-异步任务

发布时间 2023-03-29 10:30:38作者: 测试圈的彭于晏

1. 异步发送邮件

# settings.py配置邮件(详情关注邮件配置)

# tasks.py中创建任务
  from django.core.mail import send_mail
  from new.settings import EMAIL_FROM

  @shared_task
  def mail_send(mail):
      # send_mail(subject标题, message内容, from_email发件人, recipient_list收件人,)
      send_mail(**mail, from_email=EMAIL_FROM)
# urls.py
    path('task/', views.exec_task, name="task")
def exec_task(request):
    from App02.tasks import mail_send
    mail_send.delay({
        "subject": "标题",
        'message': "内容",
        'recipient_list': ['123@qq.com']
    })

    return HttpResponse("celery")
# 启动worker
    celery -A new worker -l info --pool=solo

2. 获取异步任务的结果

   # tasks.py中创建函数获取结果
    @shared_task
    def sum_even(n):
        result = 0
        for i in range(0, n + 1, 2):
            result += i
        return result


   # 获取异步任务的结果
    from celery.signals import task_success
    
    @task_success.connect(sender=sum_even)    # sender=函数: 谁发送的信号
    def complete(sender=None, result=None, **kwargs):  # 函数固定写法
        print(result)  # result 获取异步任务执行的结果

# views.py
    def exec_task(request):
        from App02.tasks import sum_even
       
        # 异步获取任务结果
        sum_even.delay(100)
        return HttpResponse("celery")