celery

Celery介绍

celery 是一个简单、灵活且可靠、处理大量消息的分布式任务队列,可以在一台或者多台机器上运行.本质是生产者消费者模型,生产者发送任务到消息队列,消息者负责处理任务。单个celery进程每分钟可以处理数以百万计的任务。通过消息进行通信,使用消息队列在生产者和消费者之间进行协调。

应用场景

  • 当前执行任务,执行时间非常长,不需要实时返回结果。
  • 定时任务

原理图

img

使用方法

安装

# 安装到虚拟环境中
pip install Celery
# 安装redis作为中间人
pip install redis
# 配置redis库 Django中是在setting中   broker_url='redis://127.0.0.1:6379/3'
# 如果使用rabbitmq作为中间人,         broker_url= 'amqp://用户名:密码@ip地址:5672'

注册任务

  • 我们需要建一个包celery_tasks,其中再建一个包,名字随意 例如:这里用sms

  • 创建好后需要在里面添加一个tasks.py文件,注意,这里的tasks名字是规定死的。

  • 需要在celery_tasks下创建一个main.py,并且报备注册上面一步创建的文件。

  • 在celery_tasks包中再添加一个config.py文件。里面配置消息队列(中间人)的信息。

    broker_url='redis://127.0.0.1:6379/3'
    
from celery import Celery
# 创建对象
celery_app = Celery('test')
# 将上面config配置给celery
# 里面的参数为我们创建的config配置文件
celery_app.config_from_object('celery_tasks.config')
# 让celery_app自动捕获目标地址下的任务,就是捕获tasks
celery_app.autodiscover_tasks(['celery_tasks.sms'])

实现任务

  • 报备后需要在tasks.py中添加具体内容

例如:

from celery_tasks.main import celery_app

@celery_app.task(name='ccp_send_sms_code')
def ccp_send_sms_code(mobile, sms_code):
    '''该函数就是一个任务, 用于发送短信'''
    result = CCP().send_template_sms(mobile,[sms_code, 5], 1)
    return result

启动消费者(celery消费者)

# 启动celery服务
celery -A celery_task.main worker -l info
# celery: celery是调用celery命令
# -A:作用是指定要启动的文件,这个参数后面的文件会被执行
# worker:启动的对象是worker,工人,干活的
# -l:指定日志打印等级,一般日志都是通知形式的,即info

补充celery worker的工作模式

  • 默认是进程池方式

    进程数以当前机器的CPU核数为参考,每个CPU开四个进程

  • 如何自己指定进程数

    celery worker -A proj --concurrency=4
    
  • 如何改变进程池方式为协程方式

    celery worker -A proj --concurrency=1000 -P enventlet -c 1000
    
    # 例如
    pip install eventlet
    celery -A celery_tasks.main worker -l info -P eventlet -c 1000
    
posted @   雨快停了  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示