Celery基础用法

Celery概述

Celery是一个分布式任务调度模块,用于在Python中处理异步任务。它允许你创建任务,并发送给工作节点执行。
Celery常常用于我们说的脏活,累活,处理耗时的操作,如发送电子邮件、处理数据、执行计算等。
上手非常简单,并且有很大的可扩展性。本篇主要介绍Celery的基本使用方法。

  • 部署Redis&RabbitMQ

使用RabbitMQ用作broker,Redis用作backend存放结果数据。具体部署此处不表,可以使用docker自行部署。

  • 安装库
# 安装celery
pip3 install celery -i https://pypi.tuna.tsinghua.edu.cn/simple
# redis包建议安装,不然可能会报错
pip3 install redis -i https://pypi.tuna.tsinghua.edu.cn/simple

celery应用

  • 创建实例
# tasks.py   文件名需与实例化对象第一个参数一致
import time
from celery import Celery

redis_url = 'redis://Password@IP:port/0'
rabbitmq_host = 'amqp://Uername:Password@IP:Port//v_host'

# 实例化Celery对象
app = Celery('tasks', # 同当前模块名
             broker= rabbitmq_host, # 消息中间件URL,此处使用RabbitMQ,也可使用Redis
             backend= redis_url, # 后端结果存储,使用Redis进行存放
             )

  • 任务定义
# tasks.py

# 使用实例化对象 @.task装饰器装饰的方法即成为任务
@app.task
def add(x, y):
    print("start...")
    time.sleep(5)
    print("end...")
    return x + y
  • 启动worker
celery worker [OPTIONS]
参数 含义
-A或–app 指定要使用的 Celery 应用程序模块。
-l或–loglevel 指定日志级别,例如 DEBUG、INFO、WARNING、ERROR、CRITICAL。
-b或–broker 指定 Celery 使用的 broker(消息中间件),例如 RabbitMQ、Redis 等。
-c或–concurrency 指定 worker 并发执行的任务数量。
-S 指定 worker 在执行任务时,如果超过这个时间没有响应,则认为任务失败。
-T 指定 worker 在执行任务时,如果超过这个时间没有响应,则立即杀死任务。
-n 指定hostname

例如,要启动上面的任务,并发执行任务数量为 10,日志级别为INFO 的 worker,可以使用以下命令:

celery -A tasks worker -c 10 -l INFO -P threads -n w01291

在这里插入图片描述

命令行输出,可以看到任务列表里出现了tasks.add,即上边有装饰器的方法成为了任务

  • 任务调用

我们可以在交互式控制台进行调用操作

>>> from tasks import add
>>> res = add.delay(5,5)
>>> res.ready()
True
>>> res.state
'SUCCESS'
>>> res.task_id
'6d067a7e-197e-4fa0-ad24-57e4497c09ad'
>>> res.result
10

可以查看Celery日志

在这里插入图片描述

也可以在Redis数据库中看到任务执行后的结果数据

在这里插入图片描述

测试发送100个任务

from tasks import add


def test_100_task():
    results = {}
    for i in range(99):
        results[f'res{i}'] = add.delay(1, i)

  • 日志

在这里插入图片描述

在这里插入图片描述

再看Redis,出现了99条结果

在这里插入图片描述

相关推荐

  1. selenium篇-基础

    2024-01-30 11:34:02       15 阅读
  2. Tinyxml基本

    2024-01-30 11:34:02       42 阅读

最近更新

  1. 【AI应用探讨】—主成分分析(PCA)应用场景

    2024-01-30 11:34:02       0 阅读
  2. 基数排序算法Python实现

    2024-01-30 11:34:02       0 阅读
  3. qt todoapp

    2024-01-30 11:34:02       0 阅读
  4. 如何减少开发过程中的bug-数据库篇

    2024-01-30 11:34:02       0 阅读
  5. 驻场运维的前途在哪里,这里有金玉良言

    2024-01-30 11:34:02       1 阅读
  6. 认字之 刬

    2024-01-30 11:34:02       1 阅读
  7. lvs集群

    lvs集群

    2024-01-30 11:34:02      0 阅读
  8. AUTOSAR:汽车软件架构的未来

    2024-01-30 11:34:02       0 阅读
  9. 相机光学(二十九)——显色指数(Ra)

    2024-01-30 11:34:02       0 阅读

热门阅读

  1. Flask 与小程序 微信模板消息

    2024-01-30 11:34:02       37 阅读
  2. Flutter Web持久化存储SharedPreferences原理

    2024-01-30 11:34:02       38 阅读
  3. 安全刷写简单说明

    2024-01-30 11:34:02       28 阅读
  4. 二、Vue3文件目录介绍

    2024-01-30 11:34:02       33 阅读
  5. Jenkins

    Jenkins

    2024-01-30 11:34:02      40 阅读
  6. Android imageView.setImageXXX() 引发的卡顿问题

    2024-01-30 11:34:02       32 阅读
  7. OkHttp的理解和使用

    2024-01-30 11:34:02       32 阅读
  8. 大白话理解大型语言模型(LLM):预训练和微调

    2024-01-30 11:34:02       28 阅读
  9. Qt基础-进度条控件QPrgressBar详解

    2024-01-30 11:34:02       30 阅读