celery+redis的使用(异步任务、定时任务)
2024-10-21 02:46:19
目录
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
最新文章
- Spring Boot中的事务管理
- PHP---------去除数组里面值为空或者为空字符串的元素
- LINQ SQL分组取最近一条记录
- WinCE开机Logo的实现(USB下载图片到nandflash)
- WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8
- 【windows核心编程】IO完成端口(IOCP)复制文件小例
- UIButton的imageEdgeInsets 和 titleEdgeInsets
- status pending状态
- 【转】JavaScript中undefined与null的区别
- 开发人员应关注的20个jQuery网站/博客
- mktime性能问题
- Error: EACCES: permission denied, mkdir '......node-sass/build'错误解决方案
- HanLP 自然语言处理 for nodejs
- Appium + Java 测试 [百度地图] APP的一段简单脚本
- [转载]ViewPort <;meta>;标记
- 数据库SQL语言学习--上级练习1(数据查询)
- Android-Genymotion Unable to load VirtualBox engine
- 深入理解Linux内核-回收页框
- 大数开根号java模板
- Android生成带图片的二维码
热门文章
- Request.Form&Request.QueryString实现伪ajax的效果
- Http请求接口
- Base58算法加密解密(Python实现)
- vivo 实时计算平台建设实践
- Redis哨兵集群搭建-Docker-Compose
- Ubuntu snap 下载慢
- 假如你想在VUE的main.js里根据条件按需引入注册组件以及样式,那就这样子写,附赠自己写的vue一个框架配置多系统按需加载系统路由以及组件办法
- Java + SikuliX 基于图像实现自动化测试
- 对线面试官:浅聊一下 Java 虚拟机栈?
- 重学SpringBoot. step2 Spring AOP