Celery常见的三大功能:
1.消息队列
2.异步任务
3.定时任务
需要了解的知识
选择并安装消息容器(载体)
安装celery 并 创建 一个任务
并开启工作进程并调用任务
记录工作状态和返回的结果
下面是官网:
https://docs.celeryproject.org/en/stable/getting-started/first-steps-with-celery.html#choosing-a-broker
英文不太友好,可以用Chrom 翻译成中文
1 安装celery
pip install celery
2.安装celery所需的redis的 依赖
pip install -U "celery[redis]"
3. 创建任务并调用
创建文件夹,添加任务
看教程尝试着做
from celery import Celery
app = Celery('tasks',broker='redis://localhost:6379/1')
@app.task
def add(a,b):
return a + b
启动服务
运行此服务
celery -A tasks worker --loglevel=info
启动后报错: MISCONF Redis is configured to save RDB snapshots, but is cur
rently not able to persist on disk. Commands that may modify the data set are disabled. Pleas
e check Redis logs for details about the error.
处理:
1:config set stop-writes-on-bgsave-error no
2:vi打开redis-server配置的redis.conf文件,然后定位到stop-writes-on-bgsave-error字符串所在位置,接着把后面的yes设置为no即可。
结果:
4 .调用任务
from time import sleep
from celery import Celery
app = Celery('tasks',broker='redis://localhost:6379/1')
@app.task
def add(a,b):
# 模拟程序需要很长的时间
sleep(5)
return a + b
if __name__ == '__main__':
# print(add(2,3))
print(add.delay(2,3))
任务开始之前重启celery,它不想Django一样 会自动重启
Ctrl+c 停止之前的任务
方向上键 输入之前的启动命令 celery -A tasks worker --loglevel=info
结果很快出来,小于设定的5s
base64 带等号 猜测为 uuid 格式
base64 纯数字 两个等号,汉字一个等号
在Django中使用 Celery
下载源码
修改settings 配置
添加路由及视图函数
url(r"^index/",views.index,name='index'),
def index(request):
return HttpResponse('hello celery')
pycharm 只保留一个窗口
结果
添加异步任务
debug 改为 False
把celery搬迁到django 项目中
# celery 配置
CELERY_BROKER_URL = 'redis://localhost:6379/1'
#: Only add pickle to this list if your broker is secured
#: from unwanted access (see userguide/security.html)
# 接收的数据类型
CELERY_ACCEPT_CONTENT = ['json']
# 存储的后端位置
CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite'
# 序列化格式 json
CELERY_TASK_SERIALIZER = 'json'
pip install django-celery-results
去settings 里注册
init
引用shared_task 装饰器,要不然,view中调用delay一直 报错
异步发送邮件
# 发送邮件配置
EMAIL_HOST='smtp.139.com'
EMAIL_PORT= 465
EMAIL_HOST_USER='huapen***@139.com'
EMAIL_HOST_PASSWORD =*********18'
SERVER_HOST = '127.0.0.1'
# SERVER_PORT ='8000'
EMAIL_USER_SSL= True
重启项目,重启celery
celery -A RestEnd worker -l info -P eventlet
win10 需要安装 eventlet 启动时加参数,最好使用网易邮箱,qq邮箱,容易被标记为垃圾邮件。