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 ...
随机推荐
- DP经典例题——LIS&LCS
DP经典例题--LIS&LCS LCS 最长公共子序列,英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列 ...
- 1、mybatis逆向工程
mybatis逆向工程可以针对单表自动生成mybatis执行所需要的mapper.java.mapper.xml代码(dao层),可以让程序员将更多的精力放在繁杂的业务逻辑上(service层与con ...
- JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来3 —— 本地缓存变身分布式集群缓存,打破本地缓存天花板
大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 上一篇文章中,我们知晓了如何在项目中通 ...
- python进阶之路18 os、sys、json模块
os模块与sys模块 os模块主要与操作系统打交道 sys模块主要与python解释器打交道 os模块(重要) os模块主要与代码运行所在的操作系统打交道 import os os.path.spli ...
- Hash——温暖人心的算法
目录 简介 计算Hash 前缀Hash递推 快速计算子串Hash 用Hash匹配字符串 综合:P2852 [USACO06DEC]Milk Patterns G 简介 Hash,将一个字符串映射到一个 ...
- MAC中Flutter下载和安装
Flutter官网 https://flutter.dev/docs/development/tools/sdk/releases?tab=macos 一.终端下配置系统环境变量和镜像 我的mac ...
- Python TensorFlow深度学习回归代码:DNNRegressor
本文介绍基于Python语言中TensorFlow的tf.estimator接口,实现深度学习神经网络回归的具体方法. 目录 1 写在前面 2 代码分解介绍 2.1 准备工作 2.2 参数配置 2 ...
- .NET与大数据
前言 当别人做大数据用Java.Python的时候,我使用.NET做大数据.数据挖掘,这确实是值得一说的事. 写的并不全面,但都是实际工作中的内容. .NET在大数据项目中,可以做什么? 写脚本(使用 ...
- python学习第六周总结
封装 封装:就是将数据和功能'封装'起来 隐藏:在类的定义阶段名字前面使用两个下划线表示隐藏.就是将数据和功能隐藏起来不让用户直接调用,而是开发一些接口间接调用,从而可以在接口内添加额外的操作 伪装: ...
- 普冉PY32系列(五) 使用JLink RTT代替串口输出日志
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...