美文网首页
django中利用celery异步发送邮件

django中利用celery异步发送邮件

作者: 小丑布莱德 | 来源:发表于2018-09-29 21:54 被阅读0次

第一步,安装celery和django-celery

第二步,celery_tasks为celery的代码位置

代码如下

from django.core.mailimport send_mail

from django.confimport settings

import time

from celeryimport Celery

import os

import django

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dailyfresh.settings')

django.setup()

app=Celery('celery_tasks.tasks',broker='redis://127.0.0.1:6379/8')

# 定义任务函数

@app.task

def send_register_active_email(to_email, username, token):

'''发送激活邮件'''

    # 组织邮件信息

    subject ='天天生鲜欢迎信息'

    message =''

    sender = settings.EMAIL_FROM

receiver = [to_email]

html_message ='<h1>%s, 欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的账户<br/><a href="http://127.0.0.1:8000/user/active/%s">http://127.0.0.1:8000/user/active/%s</a>' % (username, token, token)

send_mail(subject, message, sender, receiver, html_message=html_message)

time.sleep(5)


启动Django项目,在pycharm的Terminal启动celery

代码为  celery -A celery_tasks.tasks worker

会报错误

[2018-01-12 19:08:15,550: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',) Traceback (most recent call last): File "d:\programmingsoftware\python35\lib\site-packages\billiard\pool.py", line 358, in workloop result = (True, prepare_result(fun(*args, **kwargs))) File "d:\programmingsoftware\python35\lib\site-packages\celery\app\trace.py", line 525, in _fast_trace_task tasks, accept, hostname = _loc ValueError: not enough values to unpack (expected 3, got 0)


百度得知这是win10上运行celery4.x就会出现这个问题。

需要安装:pip install eventlet


然后启动worker的时候加一个参数,如下:

celery -A <mymodule> worker -l info -P eventlet

<mymodule> 就是celery的代码位置

我的就是  celery -A celery_tasks.tasks worker -l info -P eventlet


记录一下,方便回忆

相关文章

网友评论

      本文标题:django中利用celery异步发送邮件

      本文链接:https://www.haomeiwen.com/subject/wlcliftx.html