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

工程结构说明:

__init__.py:实例化celery,并加载配置模块

celeryconfig.py:配置模块

task1:任务1,实现加法

task2:任务2,实现乘法

app.py:应用,任务生产者

1、__init__.py:实例化celery,并加载配置模块

# -*- coding: utf-8 -*-

from celery import Celery

myapp=Celery(‘demo‘)

#通过Celery实例加载配置模块celeryconfig.py
myapp.config_from_object(‘celerywithconfig.celeryconfig‘) 

 2、celeryconfig.py:配置模块

# -*- coding: utf-8 -*-

‘‘‘
Created on 2019年8月28日

@author: lenovo
‘‘‘
BROKER_URL=‘redis://localhost:6379/1‘

CELERY_RESULT_BACKEND=‘redis://localhost:6379/2‘

CELERY_TIMEZONE=‘Asia/Shanghai‘#不指定时区的话默认采用UTC

#导入指定的任务模块
CELERY_IMPORTS=(
    ‘celerywithconfig.task1‘,
    ‘celerywithconfig.task2‘,
    )

3、task1:任务1,实现加法

# -*- coding: utf-8 -*-

‘‘‘
Created on 2019年8月28日

@author: lenovo
‘‘‘
import time

#从__init__.py中导入实例化的Celery myapp
from celerywithconfig import myapp

@myapp.task
def add(x,y):
    time.sleep(3)
    return x+y

4、task2:任务2,实现乘法

# -*- coding: utf-8 -*-

‘‘‘
Created on 2019年8月28日

@author: lenovo
‘‘‘
import time
from celerywithconfig import myapp

@myapp.task
def multiply(x,y):
    time.sleep(4)
    return x * y

5、app.py:应用,任务生产者

# -*- coding: utf-8 -*-

‘‘‘
Created on 2019年8月28日

@author: lenovo
‘‘‘
from celerywithconfig import task1
from celerywithconfig import task2

task1.add.delay(2, 4)
task2.multiply.delay(4, 5)
print ‘end...‘

6、启动worker,监听任务

cd到src路径下,执行命令python -m celery -A celerywithconfig worker --loglevel=info

7、执行app.py,生产任务

8、查看任务消费情况:worker日志显示同时接收到了2个任务,并分别进行了消费:

9、查看任务消费情况:消费结果成功保存在backend中:

原文地址:https://www.cnblogs.com/apple2016/p/11422388.html

时间: 2024-08-03 07:00:18

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

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

前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队列框架,鉴于网上关于Celery和Django结合的文档较少,大部分也只是粗粗介绍了大概的流程,在实践过程中还是遇到了不少坑,希望记录下来帮助有需要的朋友. 一.Django中的异步请求 Django Web中从一个http请求发起,到获得响应返回html页面的流程大致如下:http请求发起 --

Django使用Celery异步任务队列

1  Celery简介 Celery是异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务执行. 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收的工作任务,这个功能依赖于消息队列(MQ.Redis). 1.1  Celery原理 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成. 消息中间件:Celery本身不提供消息服务,但

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

Celery 前言: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情. 你想做一个定时任务,比如每天检测一下你们所有客户的

在python下比celery更加简单的异步任务队列RQ

前言: 这里介绍一个python下,比celery更加简单的异步工具,真的是很简单,当然他的功能没有celery多,复杂程度也没有celery大,文档貌似也没有celery多,但是为啥会介绍rq这个东西 因为他够简单. 当然他虽然简单,但是也是需要中间人的,也就是 Broker,这里只能是redis了. 他没有celery支持的那么多,比如 redis rabbitmq mongodb mysql之类的. 说回来,咱们用rq,就是看重他的简单. 如对celery有兴趣,可以看看我以前写过的博文.

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

一.Celery介绍和基本使用  Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情. 你想做一个定时任务,比如每天检测一下你

在tornado中使用celery实现异步任务处理之一

一.简介 tornado-celery是用于Tornado web框架的非阻塞 celery客户端. 通过tornado-celery可以将耗时任务加入到任务队列中处理, 在celery中创建任务,tornado中就可以像调用AsyncHttpClient一样调用这些任务. ? Celery中两个基本的概念:Broker.Backend Broker : 其实就是一开始说的 消息队列 ,用来发送和接受消息. Broker有几个方案可供选择:RabbitMQ,Redis,数据库等 Backend:

celery执行异步任务和定时任务

一.什么是Clelery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成. 消息中间件 Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成.包括,RabbitMQ, Redis等等 任务执行单元 Worker是Celery提供

cerely-分布式异步任务队列

Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务(async task)和定时任务(crontab). 在Celery中几个基本的概念,需要先了解下,不然不知道为什么要安装下面的东西.概念:Broker.Backend. broker broker是一个消息传输的中间件或消息队列,可以理解为一个邮箱. 每当应用程序调用celery的异步任务的时候,会向broker传递消息,而后celery

c# 异步任务队列(可选是否使用单线程执行任务,以及自动取消任务)

使用demo,(.net framework 4.0 自行添加async wait 扩展库) class Program { static void Main(string[] args) { Console.WriteLine("主线程"+Thread.CurrentThread.ManagedThreadId); var asyncTaskQueue = new AsyncTaskQueue { AutoCancelPreviousTask = true, // 自动取消之前的任务