文章目录
- 前言
- 一、Celery是什么?
- 二、使用步骤
- 1. 运行环境
- 2.引入库
- 3.启动celery
- 4.调用添加异步任务
- 5.项目结构
- 总结
前言
最近想了解下Python celery原理及运行流程,网上查看并练习了下
一、Celery是什么?
Celery是实时处理和任务调度的分布式任务队列。
主要应用场景:
1,web应用,当需要触发事件需要较长时间处理完成,可以交给celery进行异步执行,执行完后返回结果,这段时间不用等待,提高系统的吞吐量和响应时间。
2,完成任务时,需要额外的事件处理,如发送邮件等。
3,后台定时任务处理,celery可以帮助我们在不同服务器进行定时任务管理。
主要特性:
1,方便查询任务的进展情况,如执行结果,状态,消耗时间。
2,可以利用功能齐全的后台管理进行任务的添加,删减等操作。
3,可以进行并发操作。
4,提供异常处理机制。
具体也不详细介绍,网上多的是
二、使用步骤
1. 运行环境
win10 + python3 + redis + celery
此环境下会出现如下问题:
Celery ValueError: not enough values to unpack (expected 3, got 0)
需要先安装gevent,然后在启动celery的时候添加gevent参数
celery -A celery_tasks.main worker -l info -P gevent
2.引入库
代码如下(示例):
pip install msgpack
pip install celery
pip install redis
pip install gevent
3.启动celery
切换至项目所在目录,并运行命令:
celery -A celery_tasks.main worker -l info -P gevent
4.调用添加异步任务
运行app.py,app.py调用添加异步任务
输出的结果如下:
Redis数据结构
5.项目结构
调用任务app.py
代码如下(示例):
from celery_tasks.email.tasks import seed
seed.delay()
配置文件config.py
代码如下(示例):
BROKER_URL = 'redis://scck2svr03:6379/1' # 使用Redis作为消息代理
CELERY_RESULT_BACKEND = 'redis://scck2svr03:6379/0' # 把任务结果存在了Redis
# CELERY_TASK_SERIALIZER = 'msgpack' # 任务序列化和反序列化使用msgpack方案
CELERY_RESULT_SERIALIZER = 'json' # 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # celery任务结果有效期
CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接受的内容类型
CELERY_TIMEZONE = 'Asia/Shanghai' # celery使用的时区
CELERY_ENABLE_UTC = True # 启动时区设置
CELERYD_LOG_FILE = "/var/log/celery/celery.log" # celery日志存储位置
发送邮件tasks.py
代码如下(示例):
import time
from celery_tasks.main import celery_app
@celery_app.task(name='seed_email') # 添加celery_app.task这个装饰器,指定该任务的任务名name='seed_email'
def seed():
time.sleep(1)
return "我将发送邮件"
总结
记录点点滴滴