安装celery
pip install celery==3.1.26.post2
pip install djcelery
在settings里配置
#settings.py
INSTALLED_APPS = [
...
'djcelery',
]
配置基本连接信息
#settings.py
import djcelery
djcelery.setup_loader()
#broker
BROKER_URL= 'amqp://liuchuan:123456@123.57.45.143:5672'
#backend 看情况而定,可以不需要
CELERY_IMPORTS = ( # 指定导入的任务模块
'myapp.tasks',
# 'mydjango.celery',
)
- celery与3.7版本兼容问题
在
celery
官方的提议下,建议将async
文件的文件名改成asynchronous
C:\Python37\Lib\site-packages\kombu\async
- 需要修改的文件
C:\Python37\Lib\site-packages\celery\utils\timer2.py
C:\Python37\lib\site-packages\celery\concurrency\asynpool.py
C:\Python37\lib\site-packages\celery\worker\components.py
C:\Python37\lib\site-packages\celery\worker\autoscale.py
C:\Python37\lib\site-packages\celery\worker\consumer.py
创建tasks.py文件,编写任务代码
#tasks.py
from celery import task
from time import sleep
from houtaiguanli import settings
from django.core.mail import send_mail
@task
def add(email):
print(email)
subject = "实验楼 注册用户激活"
message = "欢迎您加入实验楼学习计划"
from_email = settings.EMAIL_HOST_USER
recipient_list = [str(email)]
send_mail(subject=subject, message=message, from_email=from_email, recipient_list=recipient_list)
print('ok')
#测试使用
@task
def as_l(x,y):
sleep(10)
return x + y
在视图里的接口调用异步任务
class lll(APIView):
def get(self,request):
res_email = request.GET.get('email')
add.delay(str(res_email))
return Response({'code':200})
开启celery
python manage.py celery worker
注意
如果还出现错误,则把file 用ctrl + 单机鼠标左键 进去把 async 该为 asynchronous
如果出现 time 和 value 交换位置 ,则打开文件 把里面的 time 和value 位置都叫换
一般配置到这里就已经可以正常使用了
下面的看情况而定
如果出错大概率需要这样,在mange.py文件加入
#manage.py
import django
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'eduapi.settings'
django.setup()