其他分享
首页 > 其他分享> > celery使用

celery使用

作者:互联网

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.3 web服务器端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需要哪些?
    3.1 task定义
      web服务器端需要完成的一些耗时操作定义为task(以@celery实例.task申明)

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

    3.3  broker(代理或者中间人)-rabbitmq
      负责web服务器进程woker进程之间交流沟通,消息存储等。

标签:web,task,worker,app2,app1,celery,使用
来源: https://blog.51cto.com/14367725/2402803