• 欢迎光临~

celery

开发技术 开发技术 2022-11-21 次浏览

celery介绍

# celery:翻译过来叫芹菜,它是一个  分布式的异步任务   框架
# celery有什么用?
    1 完成异步任务:可以提高项目的并发量,之前开启线程做,现在使用celery做
    2 完成延迟任务
    3 完成定时任务
    
# 架构
    -消息中间件:broker 提交的任务(函数)都放在这里,celery本身不提供消息中间件,需要借助于第三方:redis,rabbitmq
    -任务执行单元:worker,真正执行任务的地方,一个个进程,执行函数
    -结果存储:backend,函数return的结果存储在这里,celery本身不提供结果存储,借助于第三方:redis,数据库,rabbitmq
    

celery

 

 

 2 celery快速使用

# 1 celery官网:http://www.celeryproject.org/
# 2 介绍:Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform

# 3 celery是独立的服务
"""
1)可以不依赖任何服务器,通过自身命令,启动服务
2)celery服务为为其他项目服务提供异步解决任务需求的
注:会有两个服务同时运行,一个是项目服务,一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时异步完成项目的需求

人是一个独立运行的服务(django) | 医院也是一个独立运行的服务(celery)
    正常情况下,人可以完成所有健康情况的动作,不需要医院的参与;但当人生病时,就会被医院接收,解决人生病问题
    人生病的处理方案交给医院来解决,所有人不生病时,医院独立运行,人生病时,医院就来解决人生病的需求
"""
# 1 安装:pip3 install celery

# 2 使用步骤
    -写一个main.py :实例化得到app对象,写函数,任务,注册成celery的任务
-再别的程序中:提交任务--->提交到broker中去了 add.delay(3,4) -启动worker,从broker中取任务执行,执行完放到backend中 win: celery worker -A main -l info -P eventlet # 4.x及之前用这个 celery -A main worker -l info -P eventlet # 5.x及之后用这个 lin,mac: celery worker -A main -l info celery -A main worker -l info -再backend中查看任务执行的结果 -直接看 -通过代码查看 from main import app from celery.result import AsyncResult id = '7bef14a0-f83e-4901-b4d8-e47aaac09b39' if __name__ == '__main__': res = AsyncResult(id=id, app=app) if res.successful(): result = res.get() #7 print(result) elif res.failed(): print('任务失败') elif res.status == 'PENDING': print('任务等待中被执行') elif res.status == 'RETRY': print('任务异常后正在重试') elif res.status == 'STARTED': print('任务已经开始被执行')
main.py

from celery import Celery
import time

backend = 'redis://127.0.0.1:6379/1'
broker = 'redis://127.0.0.1:6379/0'
app = Celery('test', backend=backend, broker=broker)


# 写任务,任务就是函数,加个装饰器,变成celery的任务
@app.task
def add(a, b):
    time.sleep(2)  # 假设任务耗时比较久
    print(a + b)
    return a + b

celery包结构

程序员灯塔
转载请注明原文链接:celery
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com