晒晒我家小院子

0%

Celery的简单使用

目录结构

1
2
3
4
5
6
7
8
9
10
11
.
├── celery_tasks
│   ├── __init__.py
│   ├── config.py
│   ├── email
│   │   ├── __init__.py
│   │   └── tasks.py
│   ├── html
│   │   ├── __init__.py
│   │   └── tasks.py
│   ├── main.py

config.py

1
2
3
4
# celery配置文件

# 指定任务队列的位置
broker_url = "redis://192.168.103.210/7"

main.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from celery import Celery
import os

# 告诉celery 如果需要使用Django的配置文件,应该去那里加载
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev")

# 1.创建celery实例对象
celery_app = Celery('project')

# 2.加载配置文件
celery_app.config_from_object('celery_tasks.config')

# 3.自动注册异步任务
celery_app.autodiscover_tasks(['celery_tasks.email', 'celery_tasks.html'])

celery_tasks/email/tasks.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from celery_tasks.main import celery_app
from django.core.mail import send_mail
from django.conf import settings


@celery_app.task(name='send_verify_email')
def send_verify_email(to_email, verify_url):
"""
发激活邮箱的邮件
:param to_email: 收件人邮箱
:param verify_url: 邮箱激活url
:return:
"""
subject = "邮箱验证" # 邮件主题/标题
html_message = '<p>尊敬的用户您好!</p>' \
'<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
'<p><a href="%s">%s<a></p>' % (to_email, verify_url, verify_url)
# send_mail(subject:标题, message:普通邮件正文, 发件人, [收件人], html_message=超文本的邮件内容)
send_mail(subject, '', settings.EMAIL_FROM, [to_email], html_message=html_message)

运行celery

1
2
运行命令:
celery -A celery_tasks.main worker -l info

函数调用

1
2
3
4
5
6
7
8
9
10
class EmailSerializer(serializers.ModelSerializer):
"""更新邮箱序列化器"""
...
def update(self, instance, validated_data):
instance.email = validated_data.get('email')
instance.save()
verify_url = instance.generate_email_verify_url()
# 使用delay函数
send_verify_email.delay(instance.email, verify_url=verify_url)
return instance
-------------本文结束感谢您的阅读-------------