celery使用
作者:互联网
celery使用
-
使用方式
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.3 web服务器端task调用
result1 = moduleA.func1.delay() #通过result1可以查看func1的执行状态是否完成及完成后的结果 result2 = moduleA.func2.delay(1,2) #通过result2可以查看func2的执行状态是否完成及完成后的结果
- 使用场景
给web服务器端添加后台处理能力。web服务器端需要一些耗时的处理又不想让web客户端等待任务完成,web服务器可以给web客户端一个临时响应(例如任务已创建),web服务器端同时进行任务处理,在任务进行中或者完成后web客户端可以重新连接到web服务器查看任务的状态及是否完成。 -
celery的组成
为了完成2中需求功能,celery需要哪些?
3.1 task定义
web服务器端需要完成的一些耗时操作定义为task(以@celery实例.task申明)3.2 worker启动
task的执行在worker进程中进行,web服务器端只处理web客户端请求的接收及应答,worker进程 启动见1.23.3 broker(代理或者中间人)-rabbitmq
负责web服务器进程woker进程之间交流沟通,消息存储等。
标签:web,task,worker,app2,app1,celery,使用 来源: https://blog.51cto.com/14367725/2402803