• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回python栏目

112 - 第三方库 - Celery - 定时分布式任务执行

作者:

贺及楼

成为作者

更新日期:2024-10-28 10:41:17

Celery定时分布式任务执行

celery库的简介

Python 的 Celery 是一个强大的分布式任务队列系统,用于异步执行耗时的任务。它支持多种消息传递系统,如 RabbitMQ、Redis 等,用于任务分发和结果存储。

Celery 提供了易于使用的 API,允许开发者以声明式方式定义任务,支持定时任务、周期性任务以及基于时间的复杂任务调度。它还具备高可用性和可扩展性,非常适合构建大规模的分布式系统。

Celery 广泛应用于 Web 应用、数据处理、定期报告生成等场景,可以显著提高应用程序的响应速度和处理能力,是实现后台任务处理和异步操作的优选工具。

安装定时任务库 celery 命令、任务监控 flower 命令

  1. # celery 安装
  2. pip install celery

pip安装celery
可以看见不仅仅安装了celery,还安装了amqp-5.2.0 billiard-4.2.1 celery-5.4.0 click-8.1.7 click-didyoumean-0.3.1 click-plugins-1.1.1 click-repl-0.3.0 kombu-5.4.2 vine-5.1.0

包名 包中文名 释义 连接
amqp-5.2.0 / AMQP是一种提供高度可靠的异步消息传输协议。 /
billiard-4.2.1 / billiard是Python的进程池库,提供了多进程并发执行任务的功能。 /
celery-5.4.0 / 主进程 /
click-8.1.7 / Click 是一个 Python 库,用于创建命令行接口,支持装饰器、参数验证和帮助页面生成。 /
click-didyoumean-0.3.1 / click-didyoumean是一个Click命令行接口扩展,它在用户输入错误命令时提供智能建议。 /
click-plugins-1.1.1 / click-plugins 是一个 Python 库,用于在 Click 命令行界面中动态加载插件。它简化了插件的发现和注册过程,使得扩展应用程序变得更加容易。 /
click-repl-0.3.0 / click-repl 是一个 Python 库,用于创建基于 Click 的交互式命令行界面。 /
kombu-5.4.2 / Kombu 是一个 Python 库,用于异步消息队列,支持多种消息代理,如 RabbitMQ、Redis 和 Amazon SQS。 /
vine-5.1.0 / Vine是一个Python库,用于异步编程,提供了简单的Promise实现。 /
  1. # celery 监控 flower
  2. pip install flower

目录

  1. project
  2. .
  3. ├── config.py
  4. ├── __init__.py
  5. ├── period_task.py
  6. └── tasks.py

celery 实例初始化

__init__.py

  1. from celery import Celery
  2. app = Celery('project') # 创建 Celery 实例
  3. app.config_from_object('project.config')

配置 project.config

config.py

  1. BROKER_URL = 'redis://10.8.238.2:6379/0' # Broker配置,使用Redis作为消息中间件
  2. CELERY_RESULT_BACKEND = 'redis://10.8.238.2:6379/0' # BACKEND配置,这里使用redis
  3. CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案
  4. CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间
  5. CELERY_TIMEZONE='Asia/Shanghai' # 时区配置
  6. CELERY_IMPORTS = ( # 指定导入的任务模块,可以指定多个
  7. 'project.tasks',
  8. 'project.period_task'
  9. )

定义任务

tasks.py

  1. import celery
  2. import time
  3. from celery.utils.log import get_task_logger
  4. from project import app
  5. @app.task
  6. def sum(x, y):
  7. return x + y
  8. @app.task
  9. def mul(x, y):
  10. time.sleep(5)
  11. return x * y

https://mp.weixin.qq.com/s?__biz=MzAxMjUyNDQ5OA==&mid=2653562766&idx=1&sn=86bd7e0a834722d7554c4a1341162a69&chksm=806e0933b7198025fd60ec95973ea187450ce6a8399f4891aad13fec951b24106cf95a85e21c&scene=27