快速上手分布式异步任务框架Celery

Celery是一个分布式异步任务框架,主要由broker(如redis或rabbitmq)存储任务,worker执行任务,backend存储任务结果。它支持异步任务、延迟任务和定时任务。在Python项目中,例如Django,可以集成Celery来处理异步任务,提高系统性能。安装Celery后,通过配置broker和backend,定义任务并使用apply_async提交任务,然后通过worker执行。Celery还可以设置定时任务,通过beat调度器定期执行。

一、Celery架构介绍

Celery:芹菜?(跟翻译没有任何关系),分布式异步任务框架(跟其他web框架无关)
Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform.(不支持windows)
celery服务为其他项目服务提供异步解决任务需求的。

架构
分为三部分

  • broker:任务中间件,用户提交的任务,存在这个里面(redis,rabbitmq)
  • worker:任务执行者,消费者,真正执行任务的进程(真正干活的人)
  • backend:任务结果存储,任务执行后的结果(redis,rabbitmq)
    在这里插入图片描述
    在这里插入图片描述

celery能够做的事:

  • 异步任务(区分同步任务)
  • 延迟任务
  • 定时任务(其他框架做)

怎么更好的理解celery?
会有两个服务同时运行,一个是项目服务(django服务),一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时异步完成项目的需求。打个比方,人是一个独立运行的服务(django) | 医院也是一个独立运行的服务(celery)。正常情况下,人可以完成所有健康情况的动作,不需要医院的参与;但当人生病时,就会被医院接收,解决人生病问题,人生病的处理方案交给医院来解决,所有人不生病时,医院独立运行,人生病时,医院就来解决人生病的需求。

注:python有自己的定时任务,感兴趣的了解下apscheduler

二、Celery简单使用

安装:pip install celery==5.1.2

使用:
1.配置celery

from celery import Celery

# app=Celery('test',)

# backend='redis://:密码@127.0.0.1:6379/1'  如果有密码,这么写
broker = 'redis://127.0.0.1:6379/1'  # redis地址
backend = 'redis://127.0.0.1:6379/2'  # redis地址

# 1 实例化得到celery对象
app = Celery(__name__, backend=backend, broker=broker)

# 2 写一堆任务(计算a+b,挖井,砍树),函数
# 使用装饰器包裹任务(函数)
@app.task()
def add(a, b):
    import time
    time.sleep(2)
    return a + b

2.提交任务

# from celery_task import app
import celery_task

# 1 同步执行
# res = celery_task.add(2, 3)  # 普通的同步任务,同步执行任务
# print(res)

2 异步任务:
第一步:提交(使用任务名.apply_async(参数))
结果是任务id号,唯一标识这个任务

# res = celery_task.add.apply_async(args=[2, 3])
res = celery_task.add.apply_async(kwargs={
   
   'a':2,'b':3})
print(res)  # abab1ad3-0e58-4faa-bc05-14d157dc8217

第二步:让worker执行—>结果存到redis
通过命令启动,非windows:
5.x之前这么启动
命令:celery worker -A celery_task -l info
5.x以后
命令:celery -A celery_task worker -l info

windows:

pip3 install eventlet

5.x之前这么启动
命令:celery worker -A celery_task -l info -P eventlet
5.x以后
命令:celery -A celery_task worker -l info -P eventlet

3.查看任务执行结果

from celery_task import app

from celery.result import AsyncResult

id = 
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍婧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值