python 关于celery的异步任务队列的基本使用(celery+redis)【无配置文件设置】
环境说明:
window7 X64
python 2.7.6 、celery 3.1.25、redis 2.10.6
本地安装的redis服务端版本号:Redis-x64-3.2.100
工程结构说明:源文件下载请访问https://i.cnblogs.com/Files.aspx
1、tasks.py:实例化celery,并定义生成任务的方法add()
# -*- coding: utf-8 -*- '''
Created on 2019年8月27日 @author: lenovo
'''
import time
from celery import Celery
from celery.bin.multi import celery_exe #实例化一个celery
broker='redis://localhost:6379/1' #接收发送过来的任务,并等待celery的worker进行消费
backend='redis://localhost:6379/2' #celery的worker消费完任务后,backend保存任务执行结果
app=Celery('my_task',broker=broker,backend=backend) #在add()方法上方添加装饰器,将该方法转换为异步的
@app.task
def add(x,y):
print 'enter call func...'
time.sleep(4)
return x+y
2、app.py:
# -*- coding: utf-8 -*- '''
Created on 2019年8月27日 @author: lenovo
'''
from tasks import add if __name__ == '__main__':
print 'start task...'
result=add.delay(3, 8) #将任务发送给tasks.py中celery的broker
print 'end task...'
print result
3、执行app.py生成新任务,在未启动worker前,该任务保存在broker指定的redis数据库中等待worker进行消费;
{"body": "gAJ9cQEoVQdleHBpcmVzcQJOVQN1dGNxA4hVBGFyZ3NxBEsDSwiGcQVVBWNob3JkcQZOVQljYWxsYmFja3NxB05VCGVycmJhY2tzcQhOVQd0YXNrc2V0cQlOVQJpZHEKVSQyMTlhOWU2My0yZjExLTRiMmEtYmNjZi0yYTY2MTMzZjY3NGRxC1UHcmV0cmllc3EMSwBVBHRhc2txDVUJdGFza3MuYWRkcQ5VCXRpbWVsaW1pdHEPTk6GVQNldGFxEE5VBmt3YXJnc3ERfXESdS4=", "headers": {}, "content-type": "application/x-python-serialize", "properties": {"body_encoding": "base64", "correlation_id": "219a9e63-2f11-4b2a-bccf-2a66133f674d", "reply_to": "fa6b65cc-0efa-3ddc-bd74-246023f65e8d", "delivery_info": {"priority": 0, "routing_key": "celery", "exchange": "celery"}, "delivery_mode": 2, "delivery_tag": "aa0f8035-a256-46b3-84a9-acf8e9d490db"}, "content-encoding": "binary"}
4、启动worker,消费该任务;
cmd到celery实例化文件tasks.py所在路径下,执行命令:python -m celery -A tasks worker --loglevel=info 或者 celery -A tasks worker --loglevel=info
从日志打印和下图redis数据库可以看到,worker启动后,立刻从redis中将未消费的任务进行了消费;
任务执行的结果保存在backend设定的redis数据库中,如下图所示:
5、测试新任务:
发送任务:
查看worker执行情况:
查看backend保存结果:
6、异步与同步效果比对:
同步处理任务:
工程结构:
app.py:同步处理任务
# -*- coding: utf-8 -*-
import time '''
Created on 2019年8月27日 @author: lenovo
'''
def add(x,y):
print 'enter call func...'
time.sleep(4)
return x+y if __name__ == '__main__':
print 'start task...'
result=add(2, 8)
print 'end task...'
print result
异步处理任务:
可以看出,同步执行任务时需要等待任务过程执行完毕后才会继续,执行任务过程中存在阻塞现象;而采用异步处理,生成任务后里面就结束了,执行任务不存在阻塞现象;
python 关于celery的异步任务队列的基本使用(celery+redis)【无配置文件设置】的更多相关文章
- python 关于celery的异步任务队列的基本使用(celery+redis)【采用配置文件设置】
工程结构说明:源文件下载请访问https://i.cnblogs.com/Files.aspx __init__.py:实例化celery,并加载配置模块 celeryconfig.py:配置模块 t ...
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- Django使用Celery异步任务队列
1 Celery简介 Celery是异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务执行. 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收 ...
- Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务
前言 最近把Python写的数据采集平台往.Net Core上迁移,原本的采集任务使用多进程+线程池的方式来加快采集速度,使用Celery作为异步任务队列兼具定时任务功能,这套东西用着还行,但反正就折 ...
- Python开发【模块】:Celery 分布式异步消息任务队列
Celery 前言: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个 ...
- Python—异步任务队列Celery简单使用
一.Celery简介 Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具.它是一个任务队列,专注于实时处理,同时还支持任务调度. 中间人boker: ...
- Celery异步任务队列/周期任务+ RabbitMQ + Django
一.Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celer ...
- Python多线程异步任务队列
原文地址 python的多线程异步常用到queue和threading模块 #!/usr/bin/env python # -*- coding: UTF-8 -*- import logging i ...
- [Flask]celery异步任务队列的使用
Celery异步任务队列 目录结构树: 配置文件config.py: # 设置中间人地址 broker_url = 'redis://127.0.0.1:6379/1' 主main.py: impor ...
随机推荐
- Python——数据分析,Numpy,Pandas,matplotlib
由于图片内容太多,请拖动至新标签页再查看
- 等待唤醒机制---Day25
线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个 是生产,一个 ...
- elasticsearch regexp查询特殊字符处理
regexp表面意思就是正则查询,但是如果遇到,查询条件中包含特殊的字符串, 就会发现,需要进行相应的转义处理 需要处理Lucene regexps即可: /** * 转义字符串中的特殊字符 * 仅过 ...
- 使用gacutil把COM组件注册到全局缓存GAC中
我们在编写软件的时候,有时候需要调用COM组件,那就需要注册了,注册有两种,一种是使用regasm 在程序运行的时候注册,参考“pb调用C#编写的DLL类库“,不过受路径的限制.还有一种注册方式,使用 ...
- eclipse IDE 32位汉化方法及常用软件汉化包寻找办法
今天听说小组开发人员遇到安装eclipse不能汉化问题.了解到其他同事用的都是64位操作系统,这个同事用的32位系统.通常情况下常用软件都有各路大神发的成熟汉化包,不会出现无法安装汉化包的情况. 先找 ...
- Linux shell awk逻辑控制语句
awk逻辑控制语句 1,if...else 格式: if(条件){语句:语句} else {语句1:语句2} 如果statement只有一条语句,{}可以不写 以冒号为分隔符,判断第一个字段,如果为r ...
- mysql系列2 权限相关
mysql授权认证 请注意(大坑):mysql8.0以前的版本可以使用grant在授权的时候隐式的创建用户,8.0以后已经不支持,所以必须先创建用户,然后再授权!! 例子: 在170mysql主机上授 ...
- matplotlib 中的 colors 和 cmaps
matplotlib 中的 148 种颜色 matplotlib 中的 160 种颜色映射 1.matplotlib中的 148 种颜色 import matplotlib as plm import ...
- TL-WDN5200H无线usb网卡在Linux上的使用
买了个TL-WDN5200H无线usb网卡,但是发现它居然不支持Linux,但是我有时需要在Linux上使用,这就尴尬了.于是到网上搜索资料,终于解决了这个问题. 首先编译安装:https://git ...
- 201671030128周琳 实验十四 团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 掌握软件项目评审会流程:反思 ...