celery笔记

这篇博客详细介绍了Celery的安装、基础用法、单任务、多任务及定时任务配置,探讨了并发处理、Django集成Celery的方法,以及Celery的配置属性、模块调用、分类通道和时间管理。
摘要由CSDN通过智能技术生成

0 常规操作
1.查看等待队列长度: celery -A tasks  inspect reserved | wc -l
2.查看运行的worker数: celery -A tasks  inspect active | wc -l
3.REVOKED--超时未开始执行被移除,不占用worker,expires来确定
ready()--是在任务成功或失败或超时未执行被移除之后都会进入的状态
1 安装及基础
1.定义
    Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统
    它是一个专注于实时处理的任务队列,同时也支持任务调度
    中文官网:http://docs.jinkan.org/docs/celery/
2.在线安装  sudo pip3 install -U Celery
    离线安装
    tar xvfz celery-0.0.0.tar.gz
    cd celery-0.0.0
    python3 setup.py build
    python3 setup.py install
3.名词解释:
    broker - 消息传输的中间件,生产者一旦有消息发送,将发至broker;【RQ,redis】
    backend -   用于存储消息/任务结果,如果需要跟踪和查询任务状态,则需添加要配置相关
    worker - 工作者 - 消费/执行broker中消息/任务的进程
4.app的返回值:包含应用类的名称(Celery),当前主模块的名称(main),以及应用对象的内存地址(0x100469fd0),
    当Celery不能探查到这个任务函数属于哪个模块时,它将使用主模块名称来产生任务名称的前缀。
5.任务注册表:消息队列中保存的是任务的名称,他是由一个映射--任务注册表,将实际任务与名称映射的。每定义一个任务就会添加到该表。
    这在有些情况下会产生问题:
        1. 定义任务的主模块作为一个程序运行。此时模块名称会变。
        2. 应用在python交互终端创建。
2 Celery单任务、多任务、定时任务
1.基本结构:
    producer + worker + result
    producer:
        from celery import Celery
        app = Celery('celery_name', broker='redis://:password@127.0.0.1:6379/1',backend='redis://:password@127.0.0.1:6379/2',) # broker任务通道
        @app.task
        def task_test(a,b):
            print("task is running....")
            return a + b
        from tasks import task_test
        s = task_test.delay(a,b) # 推送任务,可在其他模块调用
        s.result
    worker:
        celery -A tasks worker -l info

2.单任务结构:创建任务(tasks.py) + 推送任务(add.py) + 执行任务(run.py) + 获取结果(result.py)
    创建任务:...
    推送任务:... print(result.id) # 获取推送后立即得到的id
    执行任务:from tasks import app
            if __name__=='__main__':
                app.worker_main()
            # 等同于终端命令执行
    获取结果:
        from celery_app_task import app
        from celery.result import AsyncResult
        async = AsyncResult(id="e919d97d-2938-4d0f-9265-fd8237dc2aa3", app=app)
        if async.successful():
            result = async.get()
            print(result)
        # result.forget() # 将结果删除
        elif async.failed():print('执行失败')
        elif async.status == 'PENDING':print('任务等待中被执行',刚刚推送出任务时或者任务还没有给worker的状态)
        elif async.status == 'RETRY':print('任务异常后正在重试')
        elif async.status == 'STARTED':print('任务已经开始被执行')
    elif async.status == 'SUCCESS':print('任务已经执行完毕')
    elif async.status == 'FAILURE':print('任务执行失败',)
    elif async.ready() == True:print('任务完结',任务执行成功完毕,或者任务执行超时,或者任务报错直接停止)
    elif async
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值