celery+redis的使用(异步任务、定时任务)
celery理解
celery是典型的生产者+消费者的模式,生产者生产任务并加入队列中,消费者取出任务消费。多用于处理异步任务或者定时任务。
安装celery+redis
pip install -i https://pypi.douban.com/simple celery
pip install -i https://pypi.douban.com/simple redis
异步任务使用
1.基础使用
新建task.py文件
from celery import Celery
app = Celery('demo', backend='redis://localhost:6379/1', broker='redis://localhost:6379/2')
@app.task
def add(x, y):
return x + y
此时相当于注册了celery app
在项目文件目录下执行python交互式编程
>>> from task import add
>>> res = add.delay(3,5)
>>> res.ready()
False
>>> res.get()
此处相当于是生产者,生产任务并交给broker
- 使用
add.delay(3,5)
异步处理add函数,或者使用add.apply_async((3,5))
res.ready()
可以查看任务是否完成res.get()
任务如果完成,可以获得任务返回结果;否则,一直阻塞,直到任务完成,然后返回结果
在项目文件目录下创建worker消费任务
celery -A task worker --loglevel=info
- task 为注册celery app的py文件名字
- 注意celery版本不同命令不同的问题
上面图片config中我们可以看到celery app名称以及broker和backend的设置
并且这里立马消费了我们开始扔进redis的任务,可以回到我们的交互式编程查看结果已经被返回回来
此时我们再扔进一个任务,可以看到结果可以马上返回
>>> res = add.delay(5,6)
>>> res.ready()
True
>>> res.get()
11
>>>
2.使用导入配置文件的方式
新建python包文件目录celery_study
在__init__.py文件中,我们注册celery app
from celery import Celery
app = Celery('demo')
# 通过celery实例获取配置
app.config_from_object('celery_study.celery_config')
新建配置文件celery_config.py
BROKER_URL = 'redis://localhost:6379/1'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_IMPORTS = (
'celery_study.task_add'
)
新建task_add.py文件书写需要异步的逻辑
import time
from celery_study import app
@app.task
def add(x, y):
time.sleep(3)
return x + y
终端启动我们的worker
celery -A celery_study worker --loglevel=info
同样也可以看到celery正常启动
新建main.py文件并执行
from celery_study import task_add
task_add.add.delay(8, 4)
print('end...')
可以看到控制台输出了end...
在worker终端界面输出了
定时任务
修改celery_config.py
from datetime import timedelta
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
# 每10s执行一次
'task1': {
'task': 'celery_study.task_add.add',
'schedule': timedelta(seconds=10),
'args': (2, 8)
},
# 每天15:00执行
'task2': {
'task': 'celery_study.task_add.add',
'schedule': crontab(hour=15, minute=0),
'args': (9, 9)
}
}
添加定时任务
1.分别启动worker和beat
启动worker
celery -A celery_study worker --loglevel=info
启动定时任务配置
celery -A celery_study beat --loglevel=info
2.同时启动worker和beat
celery -A celery_study worker --beat --loglevel=info
celery+redis的使用(异步任务、定时任务)的更多相关文章
- celery(芹菜) 异步任务 定时任务 周期任务
什么是celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 celery架构 celery的架构由三部分组成,消息中间件(me ...
- Celery+python+redis异步执行定时任务
我之前的一篇文章中写了[Celery+django+redis异步执行任务] 博文:http://blog.csdn.net/apple9005/article/details/54236212 你会 ...
- django celery redis 定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- django+celery+redis实现运行定时任务
0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择. cele ...
- 日夕如是寒暑不间,基于Python3+Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_220 定时任务的典型落地场景在各行业中都很普遍,比如支付系统中,支付过程中因为网络或者其他因素导致出现掉单.卡单的情况,账单变成了 ...
- Celery+redis实现异步
目录 Celery+redis实现异步 安装redis 安装celery-with-redis 添加celery相关配置 创建异步运行任务tasks.py 启动 Celery+redis实现异步 安装 ...
- Celery 源码解析四: 定时任务的实现
在系列中的第二篇我们已经看过了 Celery 中的执行引擎是如何执行任务的,并且在第三篇中也介绍了任务的对象,但是,目前我们看到的都是被动的任务执行,也就是说目前执行的任务都是第三方调用发送过来的.可 ...
- 06: django+celery+redis
目录: 1.1 Celery介绍 1.2 celery 组件 1.3 安装相关包 与 管理命令 1.4 celery与Django执行异步任务 1.5 在django中使用计划任务功能 1.1 Cel ...
- Celery + Redis 的探究
Celery + Redis 的探究 文本尝试研究,使用 redis 作为 celery 的 broker 时,celery 的交互操作同 redis 中数据记录的关联关系. 不在乎过程的,可以直接看 ...
- python celery + redis
redis http://debugo.com/python-redis celery http://docs.jinkan.org/docs/celery/getting-started/intro ...
随机推荐
- Spark详解(04) - Spark项目开发环境搭建
类别 [随笔分类]Spark Spark详解(04) - Spark项目开发环境搭建 Spark Shell仅在测试和验证程序时使用的较多,在生产环境中,通常会在IDEA中编制程序,然后打成Ja ...
- Maui 读取外部文件显示到Blazor中
Maui 读取外部文件显示到Blazor中 首先在maui blazor中无法直接读取外部文件显示 ,但是可以通过base64去显示 但是由于base64太长可能影响界面卡顿 这个时候我们可以使用bl ...
- [深度探索C++对象模型]关于成员初始化列表(member initiallization list)
四种特殊情况: 1.当初始化一个reference member时. 2.当初始化一个const member时. 3.当初始化一个base class的constructor,而它拥有一组参数时. ...
- Mac上安装brew的那些坑
macOS11.1 入坑! 网上看了一下午的帖子,包括官网,重装command line tool,修改brew_install文件,报错443,Faild during:git getch错误 脱坑 ...
- 【Redis实战专题】「性能监控系列」全方位探索Redis的性能监控以及优化指南
Redis基本简介 Redis是一个开源(BSD 许可).内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符串.哈希表.列表.集合.有序集合等数据类型.内置复制.Lua 脚本. ...
- MySQL 更新数据 不同条件(批量)更新不同值
一般在更新时会遇到以下场景:1.全部更新:2.根据条件更新字段中的某部分内容:3.根据不同的条件更新不同的值,以下是几种场景中常用的update方法. 一.方法分类 二.具体用法 (1)根据条件更新值 ...
- Avalonia 实现动态托盘
先下载一个gif图片,这里提供一个gif图片示例 在线GIF图片帧拆分工具 - UU在线工具 (uutool.cn) 使用这个网站将gif切成单张图片 创建一个Avalonia MVVM的项目,将图片 ...
- 手把手教你用LOTO虚拟示波器搭建测试系统整机
虚拟示波器如果用于个人的研发调试工作,主要能体现出它的小巧便携以及功能强大.而它的另一个巨大优势,可集成性可定制性高,则是在我们做项目中搭建测试系统的时候才能更好的体现出来. 通常测试系统要求长时间工 ...
- Django-Django基本使用、app、三板斧
1.纯手撸web框架 1.web框架的本质 理解1:连接前端与数据库的中间介质 理解2:socket服务端 2.手写web框架 1.编写socket服务端代码 2.浏览器访问响应无效>>& ...
- mysql13 sql优化-explain
1.Explain Explain可以对sql语句的执行性能进行分析.使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的.分析你的查询语句或是表结构 ...