celery异步分布式
Celery是一个python开发的异步分布式任务调度模块。
Celery本身并不提供消息服务,使用第三方服务,也就是borker来传递任务,目前支持rebbimq,redis, 数据库等。

这里我们使用redis
连接url的格式为:
redis://:password@hostname:port/db_number
例如:
BROKER_URL = 'redis://localhost:6379/0'

安装celery
pip install celery
pip install redis

在服务器上安装redis服务器,并启动redis
第一个简单的例子:

[root@localhost celery]# cat test.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
from celery import Celery

broker = "redis://10.37.208.40:6379/5"
backend = "redis://10.37.208.40:6379/6"
app = Celery("test",broker=broker,backend=backend) @app.task
def add(x,y):
return x+y
 

启动worker
#celery -A ling worker -l info

生产者

启动worker
#celery -A test worker -l info 生产者 form test import add
a = add.delay(10, 20)
print(a.result) #获取结果
print(a.ready) #是否处理
print(a.get(timeout=1)) #获取结果
print(a.status) #是否处理

celery模块调用
既然celery 是一个分布式的任务调度模块,那么celery是如何和分布式挂钩呢,
celery可以支持多台不通的计算机执行不通的任务或相同的任务
如果要说celery的分布式应用的话,我认为要提到celery的消息路由机制,就要提一下AMQP协议,
具体的可以查看AMQP的文档,简单地说就是可以有多个消息队列(Message Queue). 不同的消息可以指定发送给不同的Message Queue
而这是通过Exchange来实现。发送消息到Message Queue中时,可以指定routing key, Exchange通过routing key来把消息路由(routes)到不通的Message Queue中

实例:

多worker,多队列
cat /usr/local/src/celery/demon3.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @time: 2018/1/7 14:03
# Author: caicai
# @File: demon3.py from celery import Celery app=Celery()
app.config_from_object("celeryconfig") @app.task
def taskA(x,y):
return x*y @app.task
def taskB(x,y,z):
return x+y+z
@app.task
def add(x,y):
return x+y 配置文件一般单独写在一个文件中。 配置文件: cat /usr/local/src/celery/celeryconfig.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @time: 2018/1/7 14:06
# Author: caicai
# @File: celeryconfig.py
from kombu import Queue, Exchange BROKER_URL = "redis://10.37.208.40:6379/1"
CELERY_RESULT_BACKEND = "redis://10.37.208.40:6379/2"
CELERY_QUEUES = {
Queue("default",Exchange("default"),routing_key="default"),
Queue("for_task_A",Exchange("for_task_A"),routing_key="for_task_A"),
Queue("for_task_B",Exchange("for_task_B"),routing_key="for_task_B") } CELERY_ROUTES = {
'demon3.taskA':{"queue":"for_task_A","routing_key":"for_task_A"},
'demon3.taskB':{"queue":"for_task_B","routing_key":"for_task_B"} } 服务端
启动一个worker来指定taskA
celery -A tasks worker -l info -n workerA.%h -Q for_task_A
celery -A tasks worker -l info -n workerB.%h -Q for_task_B 客户端执行
import time from demon3 import * r1 = taskA.delay(20,10)
time.sleep(1)
print(r1)
print(r1.result)
r2 = taskB.delay(10,20,30)
time.sleep(1)
print(r2.result)
print(r2.status)
r3 = add.delay(100,200)
print(r3.result)
print(r3.status) 输出结果:
46adbdca-4e87-4d97-8b82-6883b7c3f64a
200
60
SUCCESS
None
PENDING 我们看到状态是PENDING,表示没有执行,这个是因为没有celeryconfig.py文件中指定改route到哪一个Queue中,所以会被发动到默认的名字celery的Queue中,但是我们还没有启动worker执行celery中的任务。下面,我们来启动一个worker来执行celery队列中的任务。
celery -A demon3 worker -l info -n worker.%h -Q celery print(r3.status) #SUCCESS
Celery与定时任务
下面我们接着在celeryconfig.py中添加CELERYBEAT_SCHEDULE变量: CELERY_TIMEZONE = 'UTC'
CELERYBEAT_SCHEDULE = {
'taskA_schedule' : {
'task':'tasks.taskA',
'schedule':20,
'args':(5,6)
},
'taskB_scheduler' : {
'task':"tasks.taskB",
"schedule":200,
"args":(10,20,30)
},
'add_schedule': {
"task":"tasks.add",
"schedule":10,
"args":(1,2)
}
} 注意格式,否则会有问题 服务器端启动:
celery -A demon3 beat

day44-Celery异步分布式的更多相关文章

  1. python—Celery异步分布式

    python—Celery异步分布式 Celery  是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向brok ...

  2. 异步分布式队列Celery

    异步分布式队列Celery 转载地址 Celery 是什么? 官网 Celery 是一个由 Python 编写的简单.灵活.可靠的用来处理大量信息的分布式系统,它同时提供操作和维护分布式系统所需的工具 ...

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

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

  4. Celery异步的分布式任务调度理解

    什么是Celery呢? Celery是一个用Python开发的异步的分布式任务调度模块. Celery本身不包含消息服务,使用第三方消息服务,也就是Broker,来传递任务,目前支持的有Rebbimq ...

  5. 【理论】python使用celery异步处理请求

    Flask中使用celery队列处理执行时间较长的请求. 一. 安装celery pip install celery flask redis 二. celery简介 Celery是个异步分布式任务队 ...

  6. Django --- celery异步任务与RabbitMQ模块

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

  7. celery异步任务、定时任务

    阅读目录 一 什么是Celery? 二 Celery的使用场景 三 Celery的安装配置 四 Celery异步任务 五Celery定时任务 六在Django中使用Celery   一 什么是Cele ...

  8. celery异步任务框架

    目录 Celery 一.官方 二.Celery异步任务框架 Celery架构图 消息中间件 任务执行单元 任务结果存储 三.使用场景 四.Celery的安装配置 五.两种celery任务结构:提倡用包 ...

  9. Celery 异步任务 , 定时任务 , 周期任务 的芹菜

    1.什么是Celery?Celery 是芹菜Celery 是基于Python实现的模块, 用于执行异步定时周期任务的其结构的组成是由    1.用户任务 app    2.管道 broker 用于存储 ...

随机推荐

  1. 2、Storm中的一些概念理解

    1.Tuple,Value,Field Tuple官方解释: "A tuple is a named of values where each value can be any type.& ...

  2. 关于Hibernate 连接mysql不能自动建表的问题

    最近看旧书,李刚那本<轻量级J2EE>在讲解hibernate的时候遇到一个问题,就是与mysql连接后,明明配置了自动建表,却老是建不了表,上网查了发现是方言的原因,到底什么是方言?这里 ...

  3. 自动化运维 --- git

    一. git 概括 二.常用指令 git init 初始化 git status 查看git的状态 git add 将文件放到缓存区 git commit -m 将缓存区的内容提交到本地仓库 git ...

  4. UVA - 12298 Super Poker II NTT

    UVA - 12298 Super Poker II NTT 链接 Vjudge 思路 暴力开个桶,然后统计,不过会T,用ntt或者fft,ntt用个大模数就行了,百度搜索"NTT大模数&q ...

  5. webform运行时弹出JavaScript的alert窗口

    https://stackoverflow.com/questions/9720143/asp-net-web-application-message-box Or create a method l ...

  6. 【.Net Core】Assets file project.assets.json not found. Run a NuGet package restore

    问题起因 添加 .net core的Project build失败. 提示以下error: Assets file project.assets.json not found. Run a NuGet ...

  7. [IoC容器Unity]第四回:使用范例

    1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接, [IoC容器Unity]第一回:Unity预览 [IoC容器Unity]第二回:Lifeti ...

  8. release环境下,当前不会命中断点,还没有为该文档加载任何符号

    今天在release编译环境下出现了如标题所说的问题“ 当前不会命中断点,还没有为该文档加载任何符号”,在网上找了几个方法都没有解决我的问题,咨询了一下师傅,解决了,很简单,方法如下:右键--属性-- ...

  9. selenium+java二元素定位

    页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法.  测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 自动化测试步骤 定位元素 ...

  10. OpenGL.tutorial06键盘和鼠标

    1.这个图是用 Excel画的 简单示意图(单元格边框,视图-->网格线) 1.1.中间的 正立方体 处于 X/Y/Z轴的中心,边长为2 ZC:代码中 原版是 人物在 (0,0,5)处,水平夹角 ...