python—Celery异步分布式

简介:

一、Celery异步分布式

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

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


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

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


clipboard.png


使用redis连接url格式:

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


1)定义连接脚本tasks.py


1
2
3
4
5
6
7
8
9
#!/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

1.png


3)执行测试 huang.py 

1
2
3
4
5
6
7
8
9
10
#!/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

<bound method AsyncResult.ready of <AsyncResult: d2e0a2d8-cdd9-4fe3-a8bb-81fe3c53ba9a>>

30

SUCCESS


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

blob.png


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



二、celery多进程

1.png

1)配置文件 celeryconfig.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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

<bound method AsyncResult.ready of <AsyncResult: e34a8490-05a7-473e-a082-f4956cabfc99>>

30

SUCCESS

None

<bound method AsyncResult.ready of <AsyncResult: 3c5cd839-dbe2-4e63-ba4e-86e8c79d943f>>

60

SUCCESS











本文转自 huangzp168 51CTO博客,原文链接:http://blog.51cto.com/huangzp/2052713,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
数据采集 存储 JSON
Python爬取知乎评论:多线程与异步爬虫的性能优化
Python爬取知乎评论:多线程与异步爬虫的性能优化
|
7月前
|
数据采集 存储 C++
Python异步爬虫(aiohttp)加速微信公众号图片下载
Python异步爬虫(aiohttp)加速微信公众号图片下载
|
7月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
11月前
|
安全
【📕分布式锁通关指南 07】源码剖析redisson利用看门狗机制异步维持客户端锁
Redisson 的看门狗机制是解决分布式锁续期问题的核心功能。当通过 `lock()` 方法加锁且未指定租约时间时,默认启用 30 秒的看门狗超时时间。其原理是在获取锁后创建一个定时任务,每隔 1/3 超时时间(默认 10 秒)通过 Lua 脚本检查锁状态并延长过期时间。续期操作异步执行,确保业务线程不被阻塞,同时仅当前持有锁的线程可成功续期。锁释放时自动清理看门狗任务,避免资源浪费。学习源码后需注意:避免使用带超时参数的加锁方法、控制业务执行时间、及时释放锁以优化性能。相比手动循环续期,Redisson 的定时任务方式更高效且安全。
771 24
【📕分布式锁通关指南 07】源码剖析redisson利用看门狗机制异步维持客户端锁
|
9月前
|
数据采集 存储 NoSQL
分布式爬虫去重:Python + Redis实现高效URL去重
分布式爬虫去重:Python + Redis实现高效URL去重
|
11月前
|
机器学习/深度学习 分布式计算 API
Python 高级编程与实战:深入理解并发编程与分布式系统
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发、API 设计、网络编程和异步IO。本文将深入探讨 Python 在并发编程和分布式系统中的应用,并通过实战项目帮助你掌握这些技术。
|
11月前
|
消息中间件 分布式计算 并行计算
Python 高级编程与实战:构建分布式系统
本文深入探讨了 Python 中的分布式系统,介绍了 ZeroMQ、Celery 和 Dask 等工具的使用方法,并通过实战项目帮助读者掌握这些技术。ZeroMQ 是高性能异步消息库,支持多种通信模式;Celery 是分布式任务队列,支持异步任务执行;Dask 是并行计算库,适用于大规模数据处理。文章结合具体代码示例,帮助读者理解如何使用这些工具构建分布式系统。
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
1577 9
|
SQL 分布式计算 数据处理
云产品评测|分布式Python计算服务MaxFrame | 在本地环境中使用MaxFrame + 基于MaxFrame实现大语言模型数据处理
本文基于官方文档,介绍了由浅入深的两个部分实操测试,包括在本地环境中使用MaxFrame & 基于MaxFrame实现大语言模型数据处理,对步骤有详细说明。体验下来对MaxCompute的感受是很不错的,值得尝试并使用!
327 1
|
Python
云产品评测|分布式Python计算服务MaxFrame获奖名单公布!
云产品评测|分布式Python计算服务MaxFrame获奖名单公布!
251 0

推荐镜像

更多