Python之Celery小试

30 篇文章 0 订阅


前言

最近想了解下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 "我将发送邮件"

总结

记录点点滴滴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

panda_225400

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值