环境说明:

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)【无配置文件设置】的更多相关文章

  1. python 关于celery的异步任务队列的基本使用(celery+redis)【采用配置文件设置】

    工程结构说明:源文件下载请访问https://i.cnblogs.com/Files.aspx __init__.py:实例化celery,并加载配置模块 celeryconfig.py:配置模块 t ...

  2. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  3. Django使用Celery异步任务队列

    1  Celery简介 Celery是异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务执行. 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收 ...

  4. Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务

    前言 最近把Python写的数据采集平台往.Net Core上迁移,原本的采集任务使用多进程+线程池的方式来加快采集速度,使用Celery作为异步任务队列兼具定时任务功能,这套东西用着还行,但反正就折 ...

  5. Python开发【模块】:Celery 分布式异步消息任务队列

    Celery 前言: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个 ...

  6. Python—异步任务队列Celery简单使用

    一.Celery简介 Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具.它是一个任务队列,专注于实时处理,同时还支持任务调度. 中间人boker: ...

  7. Celery异步任务队列/周期任务+ RabbitMQ + Django

    一.Celery介绍和基本使用  Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celer ...

  8. Python多线程异步任务队列

    原文地址 python的多线程异步常用到queue和threading模块 #!/usr/bin/env python # -*- coding: UTF-8 -*- import logging i ...

  9. [Flask]celery异步任务队列的使用

    Celery异步任务队列 目录结构树: 配置文件config.py: # 设置中间人地址 broker_url = 'redis://127.0.0.1:6379/1' 主main.py: impor ...

随机推荐

  1. Vert.x(vertx) 认证和授权

    每个线上系统几乎都是离不开认证和授权的,Vert.x提供了灵活.简单.便捷的认证和授权的支持.Vert.x抽象出了两个核心的认证和授权的接口,一个是 AuthProvider,另一个是User.通过这 ...

  2. SpringMVC-拦截器做一个登录认证的小Demo

    拦截器 拦截器的定义 处理器拦截器类似于servlet开发中的filter,用于对处理器进行预处理和后处理. 定义拦截器,实现HandlerInterceptor这个接口 接口的实现需要导入包impo ...

  3. 记录vue项目 用hbuilder离线打包集成极光推送 安卓篇

    极光推送的官方demo: https://github.com/jpush/jpush-hbuilder-demo 里面也记录有详细的方法了. 我记录下自己的过程. 首先去极光那里创建一个应用 获取A ...

  4. windows 提权脚本利用

    本地加载: Import-Module Sherlock.ps1 远程加载: IEX (New-Object System.Net.Webclient).DownloadString('https:/ ...

  5. MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?

    本文阅读时间大约3分钟. 梁桂钊 | 作者 今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢 ...

  6. 性能测试-MySQL性能查看(转)

    mysql查看数据库性能常用命令 mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句: mysql> sh ...

  7. 1047--Remove All Adjacent Duplicates In String

    public class RemoveAllAdjacentDuplicatesInString { /* 解法一:栈 */ public String removeDuplicates(String ...

  8. Reactive-MongoDB 异步 Java Driver 解读

    一.关于 异步驱动 从3.0 版本开始,MongoDB 开始提供异步方式的驱动(Java Async Driver),这为应用提供了一种更高性能的选择.但实质上,使用同步驱动(Java Sync Dr ...

  9. python调用函数设置超时机制

    有时候需要给函数设置超时机制,以防止它卡住我们的程序,这里可以用python的signal模块,signal模块可以实现程序内部的信号处理. # coding:utf8 import time imp ...

  10. 【Spring AOP】Spring AOP之你必须知道的AOP相关概念(1)

    一.什么是AOP AOP(Aspect-oriented Programming)即面向切面编程,是对OOP( Object-oriented Programming)即面向对象编程的一种补充,AOP ...