44. Python Celery多实例 定时任务

简介:

celery是一个分布式的任务调度模块,那么celery是如何和分布式挂钩呢?

celery可以支持多台不同的计算机执行不同的任务或者相同的任务。

如果要说celery的分布式应用的话,就要提到celery的消息路由机制,提到AMQP协议。

具体可以查看AMQP文档详细了解。

简单理解:

可以有多个"消息队列"(message Queue),不同的消息可以指定发送给不同的Message Queue,

而这是通过Exchange来实现的,发送消息到"消息队列"中时,可以指定routiing_key,Exchange通过routing_key来吧消息路由(routes)到不同的"消息队列"中去。

如图:

clipboard.png

exchange 对应 一个消息队列(queue),即:通过"消息路由"的机制使exchange对应queue,每个queue对应每个worker

写个例子:

vim demon3.py

1
2
3
4
5
6
7
8
9
10
11
12
from  celery  import  Celery
app  =  Celery()
app.config_from_object( "celeryconfig" )
@app .task
def  taskA(x, y):
     return  *  y
@app .task
def  taskB(x, y, z):
     return  +  +  z
@app .task
def  add(x, y):
     return  +  y

vim celeryconfig.py

1
2
3
4
5
6
7
8
9
10
11
12
13
from  kombu  import  Queue
BORKER_URL  =  "redis://192.168.48.131:6379/1"               #1库
CELERY_RESULT_BACKEND  =  "redis://192.168.48.131:6379/2"    #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" }
}

下面把两个脚本导入服务器:

指定taskA启动一个worker:

1
# celery -A demon3 worker -l info -n workerA.%h -Q for_task_A

同理:

1
# celery -A demon3 worker -l info -n workerB.%h -Q for_task_B

下面远程客户端调用:新文件

vim remote.py

1
2
3
4
5
6
7
8
9
10
11
12
from  demon3  import  *
r1  =  taskA.delay( 10 20 )
print  (r1.result)
print  (r1.status)
r2  =  taskB.delay( 10 20 30 )
time.sleep( 1 )
prnit (r2.result)
print  (r2.status)
#print (dir(r2))
r3  =  add.delay( 100 200 )
print  (r3.result)
print  (r3.status)   #PENDING

看到状态是PENDING,表示没有执行,这个是因为没有celeryconfig.py文件中指定改route到哪一个Queue中,所以会被发动到默认的名字celery的Queue中,但是我们还没有启动worker执行celery中的任务。

下面,我们来启动一个worker来执行celery队列中的任务

1
# celery -A tasks worker -l info -n worker.%h -Q celery      ##默认的

可以看到这行的结果为success

print(re3.status)    #SUCCESS


定时任务:

Celery 与 定时任务

在celery中执行定时任务非常简单,只需要设置celery对象中的CELERYBEAT_SCHEDULE属性即可。

下面我们接着在配置文件:celeryconfig.py,添加关于 CELERYBEAT_SCHEDULE 变量到脚本中去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 worker -l info -n workerA.%h -Q for_task_A

celery -A demon3 worker -l info -n workerB.%h -Q for_task_B

celery -A tasks worker -l info -n worker.%h -Q celery

celery -A demon3 beat



本文转自 听丶飞鸟说 51CTO博客,原文链接:http://blog.51cto.com/286577399/2052690


相关文章
|
2月前
|
测试技术 Python
Python中的装饰器:概念、用法及实例
【2月更文挑战第25天】 装饰器在Python中是一种强大的工具,它允许我们在不修改原始函数代码的情况下,增加函数的功能。本文将深入探讨装饰器的概念,解析其工作原理,并通过实例来展示如何在Python中使用装饰器。
|
6天前
|
机器学习/深度学习 算法 数据挖掘
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
14 0
|
6天前
|
机器学习/深度学习 算法 搜索推荐
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(上)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例
16 0
|
10天前
|
人工智能 安全 数据安全/隐私保护
Python中多种生成随机密码超实用实例
Python中多种生成随机密码超实用实例
9 0
|
11天前
|
机器学习/深度学习 自然语言处理 算法框架/工具
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译
13 5
|
12天前
|
机器学习/深度学习 数据可视化 算法
数据分享|PYTHON用决策树分类预测糖尿病和可视化实例
数据分享|PYTHON用决策树分类预测糖尿病和可视化实例
35 10
|
12天前
|
数据可视化 Python
【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例
【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例
27 0
|
18天前
|
机器学习/深度学习 数据可视化 算法
Python支持向量回归SVR拟合、预测回归数据和可视化准确性检查实例
Python支持向量回归SVR拟合、预测回归数据和可视化准确性检查实例
18 0
|
18天前
|
存储 机器学习/深度学习 数据可视化
Python面板时间序列数据预测:格兰杰因果关系检验Granger causality test药品销售实例与可视化
Python面板时间序列数据预测:格兰杰因果关系检验Granger causality test药品销售实例与可视化
58 6
|
18天前
|
机器学习/深度学习 数据可视化 算法
PYTHON用决策树分类预测糖尿病和可视化实例
PYTHON用决策树分类预测糖尿病和可视化实例
18 0