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
#启动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
result1 = moduleA.func1.delay() #通过result1可以查看func1的执行状态是否完成及完成后的结果
result2 = moduleA.func2.delay(1,2) #通过result2可以查看func2的执行状态是否完成及完成后的结果
给web服务器端添加后台处理能力。web服务器端需要一些耗时的处理又不想让web客户端等待任务完成,web服务器可以给web客户端一个临时响应(例如任务已创建),web服务器端同时进行任务处理,在任务进行中或者完成后web客户端可以重新连接到web服务器查看任务的状态及是否完成。
2中的描述是celery存在的意义,为了完成2中需求功能,celery需要哪些?
web服务器端需要完成的一些耗时操作定义为task(以@celery实例.task申明)
task的执行在worker进程中进行,web服务器端只处理web客户端请求的接收及应答,worker进程 启动见1.2
负责web服务器进程woker进程之间交流沟通,消息存储等。