第一步,安装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
记录一下,方便回忆