python celery

顾靖
2023-12-01

 

celery初使用

1.使用方式

1.1 celery实例定义,task定义 - moduleA.py

from celery import Celery

app1 = Celery("app1",broker='ampq://username1:passwd1@host1:5672/')
app2 = Celery("app2",broker='amqp://username2:passwd2@host2:5672/')

@app1.task        #func1在app1对应的worker进程中执行
def func1():
    return "helloworld"

@app2.task        #func2在app2对应的worker进程中执行
def func2(a,b):
    return a+b

1.2 shell中 启动 worker 进程

#启动app1对应的worker进程(只处理由@app1.task定义的task),启动的进程数和CPU核数相关
celery -A moduleA:app1 worker -l INFO  
#启动app2对应的worker进程(只处理由@app2.task定义的task),启动的进程数和CPU核数相关
celery -A moduleA:app2 worker -l INFO  

1.3web服务器端task调用

result1 = moduleA.func1.delay() #通过result1可以查看func1的执行状态是否完成及完成后的结果

result2 = moduleA.func2.delay(1,2) #通过result2可以查看func2的执行状态是否完成及完成后的结果

 

2.使用场景

给web服务器端添加后台处理能力。web服务器端需要一些耗时的处理又不想让web客户端等待任务完成,web服务器可以给web客户端一个临时响应(例如任务已创建),web服务器端同时进行任务处理,在任务进行中或者完成后web客户端可以重新连接到web服务器查看任务的状态及是否完成。

3.celery的组成

2中的描述是celery存在的意义,为了完成2中需求功能,celery需要哪些?

3.1 task定义

web服务器端需要完成的一些耗时操作定义为task(以@celery实例.task申明)

3.2 worker启动

task的执行在worker进程中进行,web服务器端只处理web客户端请求的接收及应答,worker进程 启动见1.2

3.3 broker(代理或者中间人)-rabbitmq

负责web服务器进程woker进程之间交流沟通,消息存储等。

 

 

 

 

 

 

 

 

 

 

 类似资料:

相关阅读

相关文章

相关问答