python消息队列celery_python—Celery异步分布式

一、Celery异步分布式

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

Celery 用于存储消息以及celery执行的一些消息和结果

对于brokers,官方推荐是rabbitmq和redis

对于backend,也就是指数据库,为了简单一般使用redis

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

使用redis连接url格式:

redis://:password@hostname:port/db_number

1)定义连接脚本tasks.py

#!/usr/bin/env python

from celery import Celery

broker = "redis://192.168.2.230:6379/1"

backend = "redis://192.168.2.230:6379/2"

app = Celery("tasks", broker=broker, backend=backend)

@app.task

def add(x,y):

return x+y

2)安装启动celery

pip install celery

pip install redis

启动方式:celery -A huang tasks -l info #-l 等同于 --loglevel

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

3)执行测试 huang.py

#!/usr/bin/env python

from tasks import add

re = add.delay(10,20)

print(re.result) #任务返回值

print(re.ready) #如果任务被执行返回True,其他情况返回False

print(re.get(timeout=1)) #带参数的等待,最后返回结果

print(re.status) #任务当前状态

运行结果:

30

>

30

SUCCESS

4)根据成功返回的key或celery界面输出的信息,查看redis存储

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

说明:停止celery服务,执行完huang.py之后,再启动celery服务也是有保存数据的

二、celery多进程

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

1)配置文件 celeryconfig.py

#!/usr/bin/env python

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

from kombu import Exchange,Queue

BROKER_URL = "redis://192.168.2.230:6379/3"

CELERY_RESULT_BACKEND = "redis://192.168.2.230:6379/4"

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 = {

'tasks.taskA':{"queue":"for_task_A","routing_key":"for_task_A"},

'tasks.taskB':{"queue":"for_task_B","routing_key":"for_task_B"}

}

2)tasks.py

#!/usr/bin/env python

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

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

3)启动celery

celery -A tasks worker --loglevel info

4)执行脚本huang2.py

#!/usr/bin/env python

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

from tasks import taskA,taskB

re = taskA.delay(10,20)

print(re.result) #任务返回值

print(re.ready) #如果任务被执行返回True,其他情况返回False

print(re.get(timeout=1)) #带参数的等待,最后返回结果

print(re.status) #任务当前状态

re2 = taskB.delay(10,20,30)

print(re2.result)

print(re2.ready)

print(re2.get(timeout=1))

print(re2.status)

5)运行结果

None

>

30

SUCCESS

None

>

60

SUCCESS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值